Datentypen Short aus Bytes - Signed -> Unsigned?

  • Themenstarter Themenstarter qwertzuiokjgnb
  • Beginndatum Beginndatum
Q

qwertzuiokjgnb

Gast
Folgende Aussage:

We use _a1 and _a2 (both unsigned bytes) to construct a 16 bit signed variable.

Wie kann das möglich sein? Oder, anders gefragt, wie kann ich in Java aus zwei "unsigned bytes" (ich verwende im Programm hierfür ints, um auf 0-255 zu kommen) ein "signed short" erstellen? Ich glaube, das ist eher ein prinzipielles Problem.
 
Sobald Du mit Ganzzahltpyen in Java rechnest, sind die immer vorzeichenbehaftet. Was hier aber wohl mit unsigned byte gemeint ist, ist dass mit den bytes nicht gerechnet wird, sondern direkt die in ihnen enthaltene Bitfolge verarbeitet wird.
 
Was hier aber wohl mit unsigned byte gemeint ist, ist dass mit den bytes nicht gerechnet wird, sondern direkt die in ihnen enthaltene Bitfolge verarbeitet wird.

Ja, darauf bin ich auch in etwa gekommen. Eine ganzzahlige Variable mit 16 Bit ist in Java ein Short, wenn ich mich nicht irre. Kann mir jemand sagen, wie ich aus den zwei "unsigned bytes" (bei mir als int vorliegend) zu einem Short konvertiere? Ich glaube, ich stehe hier gerade etwas auf dem Schlauch.
 
Wenn Du sicher bist, dass in Deinem int nur Werte drinnen sind, die auch in einen short passen, kannst Du einfach casten:
Java:
short myShort = (short) myInt;
Sollte allerdings ein Wert im int stecken, der den Wertebereich von short sprengt, dann läuft der Code zwar, aber in dem short steckt dann fachlicher Müll drinnen.
 
Kommt darauf an was du genau möchtest. Einfach addieren? Dann rechnen und casten.

Möchtest du, dass die 2 Bytes ein Short bilden, musst du dies auf Bitebene tun:
((a & 0xFF) << 8) | (b & 0xFF)
Durch das & 0xFF kannst du auch die Werte in 2 Bytes speichern.

Wenn du nur mit ints arbeitest kannst du es auch vereinfachen:
int a = 207;
int b = 55;
int c = (a << 8) | b;

Alternativ kannst du das ganze auch über einen ByteBuffer machen.
Vorteil wäre hier, du kannst LITTLE ENDIAN oder BIG ENDIAN (ByteOrder) angeben und musst dich darum nicht mehr selbst kümmern.
 

Zurück
Oben