java: char[] als integer

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

java: char[] als integer

Beitrag von lisan » 20.04.2004 17:22:30

Hi,

ueber einen socket lese ich 4 bytes mit der Klasse BufferedReader aus.

Ich hab nun ein char[4].
Dieses array muss ich als integer interpretieren und von network byte order nach host byte order konvertieren.

Wie mach ich sowas, ich bin javanoob und hab hier relativ wenig ahnung.

Gruss,
Arvid.

p.s. Hier der cpp code, der genau das tut

Code: Alles auswählen

  size_t net_length, pkt_length;

  if (ReadBytes(fd, &net_length, 4) < 0)
    return -1;

  pkt_length = ntohl(net_length);

Benutzeravatar
emge
Beiträge: 1525
Registriert: 20.10.2003 22:05:46
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: 50° 45' 0" N 12° 10' 0" E

Beitrag von emge » 20.04.2004 17:54:57

1)
http://jguru.com/faq/view.jsp?EID=25977 hat geschrieben:Because different operating systems have different integer representations, when you send integers over a socket from a C or C++ program it is important to use the functions htons(), htonl(), ntohs(), and ntohl() to convert to and from Network Byte Order. This machine-independent standard network representation ensures that different operating systems can exchange data.

I/O in Java always uses Network Byte Order, so there is no need for conversion, and no equivalent of the above functions (hton.
2)
Ansonsten sollte es ja kein Problem sein, die 4 Bytes in dem Array passend umzusortieren.

3)
byte array in integer umwandeln? Google hilft mal schnell: http://www.artima.com/forums/flat.jsp?f ... read=40277

Grüße, Marco

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.04.2004 18:06:49

Ein Char in Java ist 2 Byte lang (UTF 16 wäre das glaub ich). Hast du jetzt ein char[4] oder ein char[2]?

Du könntest z.B. mit read() die ersten zwei bytes lesen, die dann mit den komischen <<-Operator rüberschieben und dann noch den Rest lesen. read() liefert ja einen int.
Allerdings weiss ich nicht genau was java exakt mit den Sachen anstellt.

Wenn du Bytes einfach so willst musst du nicht die Reader-Klassen sondern die InputStream-Klassen verwenden - die können dann auch bytes lesen, die du wie emge geschrieben hat umwandeln kannst.

MfG Peschmä

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

Beitrag von lisan » 20.04.2004 18:08:06

Ja, hab ich jetzt auch hin und her verschoben, bis es gepasst hat.
Ich dachte es gibts halt was schoeneres ala x.toHostOrder.

Antworten