Hallo Gemeinde,
ich habe folgendes Problem:
Ich schicke von einem Automatisierungssystem 200Byte Pakete an einen PC. Soweit so gut.
Wert in 4 Bytes.
Nun habe ich fest gestellt, dass manche Werte nicht richtig dargestellt werden.
Beispiele für Temperaturwerte:
Wert in SPS
127°C -> Byte [0] = 0x00 , Byte [1] = 0x00 , Byte[2] = 0x00 , Byte[3] = 0x7F
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 0, tempbytes[3]=127
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 127.0
alles ok soweit.
Jetzt mal 650°C
650°C -> Byte[0] = 0x00, Byte[1] = 0x00, Byte[2] = 0x02, Byte[3] = 0x8A
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 2, tempbytes[3]=96
ergibt nach
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 608.0
Java kann Bytes von -128 bis 127.
Wie kann ich das umwandeln? Ich verstehe die Logik dahinter nicht.
z.B.
128°C -> Byte [0] = 0 , Byte [1] = 0 , Byte[2] = 0 , Byte[3] = 80
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 0, tempbytes[3]=-84
Also ist 128 -> in Java 0 0 0 -84
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 172.0
Lt. Bitmuster sollte doch hier für 128 doch 10000000 rauskommen?
Wenn ich 0x80 & 0xFF maskiere bekomme ich 172 als int Wert.
Weiss hier jemand Rat?
Gruss Chef
ich habe folgendes Problem:
Ich schicke von einem Automatisierungssystem 200Byte Pakete an einen PC. Soweit so gut.
Wert in 4 Bytes.
Nun habe ich fest gestellt, dass manche Werte nicht richtig dargestellt werden.
Beispiele für Temperaturwerte:
Wert in SPS
127°C -> Byte [0] = 0x00 , Byte [1] = 0x00 , Byte[2] = 0x00 , Byte[3] = 0x7F
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 0, tempbytes[3]=127
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 127.0
alles ok soweit.
Jetzt mal 650°C
650°C -> Byte[0] = 0x00, Byte[1] = 0x00, Byte[2] = 0x02, Byte[3] = 0x8A
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 2, tempbytes[3]=96
ergibt nach
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 608.0
Java kann Bytes von -128 bis 127.
Wie kann ich das umwandeln? Ich verstehe die Logik dahinter nicht.
z.B.
128°C -> Byte [0] = 0 , Byte [1] = 0 , Byte[2] = 0 , Byte[3] = 80
kommt in Java so an:
tempbytes[0] = 0, tempbytes[1]=0, tempbytes[2] = 0, tempbytes[3]=-84
Also ist 128 -> in Java 0 0 0 -84
float l = (float)ByteBuffer.wrap(tempbytes).order(ByteOrder.BIG_ENDIAN).getInt();
= 172.0
Lt. Bitmuster sollte doch hier für 128 doch 10000000 rauskommen?
Wenn ich 0x80 & 0xFF maskiere bekomme ich 172 als int Wert.
Weiss hier jemand Rat?
Gruss Chef