128 bis 159 = 3F ?!



  • Hallo ihr,
    ich habe ein problem.

    Wenn ich versuche einen Wert von 128 - 159 in einen String einzutragen, bekomme ich immer den gleichen Wert herraus.

    Bsp.

    String test = new String();
        char c = (char)157;
        test = String.valueOf(c);
    

    den string test gebe ich dann mittels dieser hex function aus :

    int data = test.getBytes()[0];
        if (data < 0)
        {
            data += 256;
        }
        String hex_data = Integer.toHexString(data);
        if (hex_data.length() == 1)
        {
            hex_data = "0" + hex_data;
        }
        System.out.println(hex_data);
    

    von 128 bis 159 kommt immer 3F raus bei 127 und 160 kommen die richtigen hex werte raus.

    Hoffe mir kann jemand helfen.

    Mfg Lisa



  • Habe vergessen :
    Allgemein gilt halt, dass anstatt der z.b. der Wert 130 eingetragen wird, der Wert 63 eingetragen wird.

    Mfg Lisa



  • Hi,
    direkt nochmal ich.

    Ich habe jetzt ein bisschen rumprobiert.

    Wenn ich das ganze so mache :

    byte[] data = {(byte)158};
        String test = new String(data);
    

    Hat der String test den richtigen Wert, wenn ich nun jedoch die Zahl verwende die ich brauche, nähmlich 157, hat der String wieder den Wert 63 bzw 3F.

    Mit 156 geht es auch einwandfrei....

    Nun denke ich, dann es an den verschiedenen character encodings liegt, also ASCII Unicode usw..

    Nun ist aber meine frage, welche ist die richtige, mit der ich alle bytes normal schreiben kann? Also von 0-255

    Mfg Lisa



  • LilaLisa schrieb:

    Nun denke ich, dann es an den verschiedenen character encodings liegt, also ASCII Unicode usw..

    Das wird es sein. String.getBytes() versucht wohl den String zu encodieren und nimmt dafür als standard encoding ASCII, welches für über 127 nicht definiert ist. Als ersatz wird "?" gewählt, welches dem hex code 3F entspricht.

    Mit charAt() geht es aber z.B. ohne Probleme:

    char data = test.charAt(0);
    
    String hex_data = Integer.toHexString(data);
    if (hex_data.length() == 1)
    {
        hex_data = "0" + hex_data;
    }
    System.out.println(hex_data);
    


  • Erstmal danke für deinen Hilfeversucht. 🙂

    Hast du es mit 158 getestet? Weil 158 scheint die Standart character encoding zu kennen.

    Und am String geht es mir ja darum, dass dort auch wirklich die 9D (157) steht. 😞

    Weil wenn ich es so mache, steht da halt die 3F (63) was aber nicht sein soll.

    Mfg Lisa



  • Ok,
    scheine das problem doch gelöst zu haben ... habe das zwar schon vor 2 Stunden versucht und da ging es nicht, aber nun geht es....
    Naja egal... lösung ist aujedenfall das charset ISO8859-1 welches 255 character, also alle 255 eines bytes enthält.

    Mfg Lisa


Anmelden zum Antworten