Übersetzung Java => PB
Verfasst: 07.05.2011 22:13
Ich quäle mich mit folgender Java-Zeile:
j8 = i6 << 16 | i5 & 0xffff
und bekomme sie in PB nicht hin. Es kommt zwar etwas heraus, aber das Ergebnis stimmt nicht.
i6 und i5 sind Integer (normale PB SmallEndians), die aber garantiert in je 2 Byte passen. Der Sache nach geht es also darum, zwei Werte im Wertebereich eines Words aus zwei Intergern in die Bytes 1 und 2 sowie 3 und 4 einer Integer zu schreiben (Wozu das auch immer gut sein soll).
Macht es einen Unterschied, ob man die Werte erst in BigEndians (also Javaformat) umwandelt? Habe ich auch schon versucht, klappt aber auch nicht, dann kommt nur noch 0 heraus. Umwandeln geht, falls doch erforderlich mit dem Makro.
Wertet PB den Ausdruck vielleicht anders aus als Java? Was muß ich dann ändern?
j8 = i6 << 16 | i5 & 0xffff
und bekomme sie in PB nicht hin. Es kommt zwar etwas heraus, aber das Ergebnis stimmt nicht.
i6 und i5 sind Integer (normale PB SmallEndians), die aber garantiert in je 2 Byte passen. Der Sache nach geht es also darum, zwei Werte im Wertebereich eines Words aus zwei Intergern in die Bytes 1 und 2 sowie 3 und 4 einer Integer zu schreiben (Wozu das auch immer gut sein soll).
Macht es einen Unterschied, ob man die Werte erst in BigEndians (also Javaformat) umwandelt? Habe ich auch schon versucht, klappt aber auch nicht, dann kommt nur noch 0 heraus. Umwandeln geht, falls doch erforderlich mit dem Makro.
Code: Alles auswählen
Macro intEndian
zahl = i5
Zahl = ((Zahl&$FF)<<24)+((Zahl&$FF00)<<8)+((Zahl&$FF0000)>>8)+((Zahl>>24)&$FF)
i5 = zahl
zahl = i6
Zahl = ((Zahl&$FF)<<24)+((Zahl&$FF00)<<8)+((Zahl&$FF0000)>>8)+((Zahl>>24)&$FF)
i6 = zahl
EndMacro
i5.i = 143
i6.i = 845
j8.i = i6 << 16 | i5 & $ffff
debug j8.i