Avatar billede kasseper Nybegynder
28. april 2004 - 09:23 Der er 7 kommentarer og
1 løsning

Fra hex til byte

Hep hey

jeg har en metode der konvertere et byte[] til en hex streng :
/*
    * Converts a byte to hex digit and writes to the supplied buffer
    */
    private void byte2hex(byte b, StringBuffer buf) {
        char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
                            '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        int high = ((b & 0xf0) >> 4);
        int low = (b & 0x0f);
        buf.append(hexChars[high]);
        buf.append(hexChars[low]);
    }

    /*
    * Converts a byte array to hex string
    */
    private String toHexString(byte[] block) {
        StringBuffer buf = new StringBuffer();

        int len = block.length;

        for (int i = 0; i < len; i++) {
            buf.append("0x");
            byte2hex(block[i], buf);
            if (i < len-1) {
                buf.append(":");
            }
        }
        return buf.toString();
    }


Det jeg så mangler er nu en metode til at reverse det hele og
får byte[] tilbage.

Mit problem ligger i at hvis jeg f.eks. har en streng der ser sådan her ud :

0xA7:0xCD:0x92:0x04:0xD7:0x9A:0x38:0x7B:0x3C:0xE1:0x97:0x5D:0xC8:0xC3:0xC3:0x45

Så har jeg lavet en funktion :

public byte[] toByteArray(String cryptedString)
    {
        StringTokenizer st = new StringTokenizer(cryptedString, ":");
        ArrayList list = new ArrayList();
        while(st.hasMoreTokens())
        {
            list.add(st.nextToken());
        }
        byte[] result = new byte[list.size()];
        for(int i = 0; i < list.size(); i++)
        {
            result[i] = Byte.decode(list.get(i).toString()).byteValue();
        }
        return result;
    }

java.lang.NumberFormatException: Value out of range. Value:"A7" Radix:16

WHAT TO DO...?
Avatar billede kasseper Nybegynder
28. april 2004 - 09:23 #1
Avatar billede kasseper Nybegynder
28. april 2004 - 09:24 #2
og fejlen kommer selvfølgelig i denne linie :

result[i] = Byte.decode(list.get(i).toString()).byteValue();
Avatar billede arne_v Ekspert
28. april 2004 - 09:51 #3
Java byte er signed -128...127 !

0xA7 er større end 127.

Prøv Short.decode og så en cast til byte.
Avatar billede kasseper Nybegynder
28. april 2004 - 10:02 #4
yeps, smider du et svar ?
Avatar billede dsj Nybegynder
28. april 2004 - 10:24 #5
Det er ikke nødvendigt at bruge Short.decode, men spild af CPU-tid :)
Følgende gør det nødvendige:

byte b = (byte) 0xA7;

b vil være lig -89
Avatar billede arne_v Ekspert
28. april 2004 - 10:28 #6
svar
Avatar billede arne_v Ekspert
28. april 2004 - 10:29 #7
dsj>

Short decode er for at konvertere fra String til short.
Avatar billede dsj Nybegynder
28. april 2004 - 10:40 #8
ohhh, den havde jeg ikke lige fanget :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester