Domanda Come convertire stringhe esadecimali in valori di byte in Java


Ho un array di stringhe. Voglio convertirlo in array di byte. Io uso il programma Java. Per esempio:

String str[] = {"aa", "55"};

convertire in:

byte new[] = {(byte)0xaa, (byte)0x55};

Cosa posso fare?


22
2017-12-28 06:52


origine


risposte:


Guardando il campione, suppongo tu intenda che un array di stringhe sia in realtà una matrice di rappresentazione HEX di byte, vero?

Se sì, allora per ogni elemento stringa farei quanto segue:

  1. controlla che una stringa sia composta solo da 2 caratteri
  2. questi caratteri sono in '0' .. '9' o 'a' .. 'f' intervallo (prendi in considerazione il loro caso anche)
  3. convertire ciascun carattere in un numero corrispondente, sottraendo il valore del codice di '0' o 'a'
  4. costruire un valore di byte, dove il primo carattere è più alto e il secondo carattere minore. Per esempio.

    int byteVal = (firstCharNumber << 4) | secondCharNumber;
    

14
2017-12-28 07:10



String str = "Your string";

byte[] array = str.getBytes();

54
2017-12-28 06:58



Converti stringa in matrice di byte:

byte[] theByteArray = stringToConvert.getBytes();

Converti stringa in byte:

 String str = "aa";

 byte b = Byte.valueOf(str);

11
2017-12-28 06:55



Puoi provare qualcosa di simile a questo:

String s = "65";

byte value = Byte.valueOf(s);

Usa il Byte.ValueOf() metodo per tutti gli elementi dell'array String per convertirli in valori Byte.


9
2017-12-28 06:53



Una lunga strada da percorrere :). Non sono a conoscenza dei metodi per sbarazzarsi di molto for dichiarazioni

ArrayList<Byte> bList = new ArrayList<Byte>();
for(String ss : str) {
    byte[] bArr = ss.getBytes();
    for(Byte b : bArr) {
        bList.add(b);
    }
}
//if you still need an array
byte[] bArr = new byte[bList.size()];
for(int i=0; i<bList.size(); i++) {
    bArr[i] = bList.get(i);
}

3
2017-12-28 07:11



Dal momento che non c'era una risposta per conversione da stringa esadecimale a byte singolo, ecco il mio:

private static byte hexStringToByte(String data) {
    return (byte) ((Character.digit(data.charAt(0), 16) << 4)
                  | Character.digit(data.charAt(1), 16));
}

Esempio di utilizzo:

hexStringToByte("aa"); // 170
hexStringToByte("ff"); // 255
hexStringToByte("10"); // 16

Oppure puoi anche provare il Integer.parseInt(String number, int radix) imo, è molto meglio di altri.

// first parameter is a number represented in string
// second is the radix or the base number system to be use
Integer.parseInt("de", 16); // 222
Integer.parseInt("ad", 16); // 173
Integer.parseInt("c9", 16); // 201

3
2017-09-01 06:42



String source = "testString";
byte[] byteArray = source.getBytes(encoding); 

È possibile foreach e fare lo stesso con tutte le stringhe nella matrice.


2
2017-12-28 06:56



Il modo più semplice (usando Apache Common Codec):

byte[] bytes = Hex.decodeHex(str.toCharArray());

0
2018-06-20 14:50



String str[] = {"aa", "55"};

byte b[] = new byte[str.length];

for (int i = 0; i < str.length; i++) {
    b[i] = (byte) Integer.parseInt(str[i], 16);
}

Integer.parseInt (string, radix) converte una stringa in un numero intero, il parametro radix specifica il sistema numerale.

Usa una radice di 16 se la stringa rappresenta un numero esadecimale.
Usa una radice di 2 se la stringa rappresenta un numero binario.
Usa una radice di 10 (o ometti il ​​parametro radix) se la stringa rappresenta un numero decimale.

Per ulteriori dettagli, consultare i documenti Java: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int)


0
2018-06-30 22:42



Qui, se stai convertendo string in byte []. C'è un codice di utilità:

    String[] str = result.replaceAll("\\[", "").replaceAll("\\]","").split(", ");
    byte[] dataCopy = new byte[str.length] ;
    int i=0;
    for(String s:str ) {
        dataCopy[i]=Byte.valueOf(s);
        i++;
    }
    return dataCopy;

0
2017-07-26 09:25