Zapis "surowych" bitów do pliku

witam, mam taki kod:

[code=“Ruby”]def send_msg(stream, msg)
len = msg.length
#stream.write(len.to_s(2).to_i)
stream.write(msg)
stream.close()
end

PRZYKŁAD UŻYCIA

file = File.open(“plik.txt”, “w”)
stream = IO.new(file.to_i, “w”)
send_msg(stream, “Polskie znaki: ęóąśłżźćń”)[/code]
i chcialbym zeby pierwsze 4 znaki(bajty) zapisane w strumieniu (w powyższym przyakładzie pliku) były zapisane jako “raws bytes”. zakomentowana linijka oczywiście nie działa :stuck_out_tongue:

nie znam za dobrze R. a muszę to w nim właśnie napisać… jakies propozycje?

chodzi mi mniej wiecej o cos takeigo:

static public void send_msg(java.io.OutputStreamWriter w, String s) { try { int len= s.length(); java.nio.ByteBuffer bb= java.nio.ByteBuffer.allocateDirect(4); bb.putInt(0, len); w.write(bb.get(3)); w.write(bb.get(2)); w.write(bb.get(1)); w.write(bb.get(0)); w.write(s); } catch (java.io.IOException e) { System.out.println("blad send_msg !!!"); } }

jak chcesz w trybie bitowym to nie w a wb, dokumentacja File i IO, ponownie odsyłam

ech poczytaj ta dokumentację, bo niedługo niekomu może się już nie chcieć na podstawy z dokumentacji odpowiadać.

[code=ruby]#!/usr/bin/ruby

file = File.new(‘test.txt’, “wb”)

tekst = “Ala ma kota”

file.write(tekst[0…4])[/code]

gotar@laptop ~/Tmp $ cat test.txt Ala mgotar@laptop ~/Tmp $
Ps
To nie jakaś JAVA dziwna, nie musisz takich chorych konstrukcji robić jak widzisz powyżej ;]

Pierwsza kwestia, o której zapomniałeś, to: “której wersji Rubiego używasz?”. Mogą być tutaj pewne różnice pomiędzy 1.8 a 1.9. Nie wiem, co dokładnie robi kod w Javie, ale:

  • len.to_s(2) zwraca długość zapisaną w systemie dwójkowym, np. 23.to_s(2) daje “10111”
  • “10111”.to_i zamienia to na liczbę 10111, która przy zapisie do strumienia jest najpewniej konwertowana ponownie na ciąg “10111”
    Jeśli napiszesz coś więcej poza “nie działa” to może będzie łatwiej znaleźć przyczynę problemu.