K
Karl123
Gast
Hallo,
seit einiger Zeit versuche ich Big-Endian in Little-Endian zu konvertieren.
Nun glaubte ich eine Lösung gefunden zu haben: mit Verschiebeoperatoren.
Nach ausgiebigem Test musste ich leider feststellen, dass manchmal falsche Werte geliefert werden.
Wo liegt der Fehler und wie kann ich ihn eliminieren?
Hier mein Programm mit einem der wenigen Werte, der falsch berechnet wird:
Kommentar: Die Dezimalzahl 18953 liefert die hex-Zahl 4a09 (Big Endian). Die entsprechende Little-Endian-Zahl sollte 094a lauten. Geliefert wird die fehlerhafte Zahl 94a0. Möglicherweise hängt das Problem mit der führenden Null zusammen.
Leider finde ich nur sehr spärlich Literatur zur Arbeitsweise der o.g. Vergleichsoperatoren. Daher kann ich das Beispiel nicht im Detail nachvollziehen.
Ausserdem gibt es kein Short.toHexString, daher der Umweg über Integer.
Ein ähnliches Beispiel findet sich unter http://www.codeguru.com/java/articles/366.shtml. Es arbeitet ebenso unkorrekt.
seit einiger Zeit versuche ich Big-Endian in Little-Endian zu konvertieren.
Nun glaubte ich eine Lösung gefunden zu haben: mit Verschiebeoperatoren.
Nach ausgiebigem Test musste ich leider feststellen, dass manchmal falsche Werte geliefert werden.
Wo liegt der Fehler und wie kann ich ihn eliminieren?
Hier mein Programm mit einem der wenigen Werte, der falsch berechnet wird:
Code:
public class LendianShort
{
public static void main(String[] args)
{
int i = 18953;
String hex = Integer.toHexString(i);
System.out.println("hex = "+hex);
System.out.println("hexLittleEndian = "+Integer.toHexString(swabInt(i)));
String hexLE = Integer.toHexString(swabInt(i));
String hexLEShort = hexLE.substring(0,4);
System.out.println("hexLEShort = "+hexLEShort +" i="+i);
}
public final static int swabInt(int v) {
return (v >>> 24) | (v << 24) | ((v << 8) & 0x00FF0000) | ((v >> 8) &
0x0000FF00);
}
}
Kommentar: Die Dezimalzahl 18953 liefert die hex-Zahl 4a09 (Big Endian). Die entsprechende Little-Endian-Zahl sollte 094a lauten. Geliefert wird die fehlerhafte Zahl 94a0. Möglicherweise hängt das Problem mit der führenden Null zusammen.
Leider finde ich nur sehr spärlich Literatur zur Arbeitsweise der o.g. Vergleichsoperatoren. Daher kann ich das Beispiel nicht im Detail nachvollziehen.
Ausserdem gibt es kein Short.toHexString, daher der Umweg über Integer.
Ein ähnliches Beispiel findet sich unter http://www.codeguru.com/java/articles/366.shtml. Es arbeitet ebenso unkorrekt.