2015-12-16 18 views
8

Ho un array di byte della forma [4,-101,122,-41,-30,23,-28,3,..] che voglio convertire in forma 6d69f597b217fa333246c2c8 sto usando qui di seguito la funzionearray di byte alla conversione stringa esadecimale in javascript

function toHexString(bytes) { 
    return bytes.map(function(byte) { 
    return (byte & 0xFF).toString(16) 
    }).join('') 
} 

che mi sta dando una serie di la stessa forma ma ho il sospetto che non è una conversione efficiente perché la stringa esadecimale è un po 'più corta del previsto. Penso che la traduzione dovrebbe ottenere "0a10a6dc". Ti prego, dimmi se sbaglio o si tratta di un diritto di conversione, ma forse io non sto usando il diritto array di byte

array di byte 4,-127,45,126,58,-104,41,-27,-43,27,-35,100,-50,-77,93,-16,96,105,-101,-63,48,-105,49,-67,110,111,26,84,67,-89,-7,-50,10,-12,56,47,-49,-42,-11,-8,-96,-117,-78,97,-105,9,-62,-44,-97,-73,113,96,23,112,-14,-62,103,-104,90,-14,117,78,31,-116,-7

corrispondente conversione 4812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ceaf4382fcfd6f5f8a08bb261979c2d49fb771601770f2c267985af2754e1f8cf9

+0

Spiacente, ho aggiornato il codice. Ho cambiato le variabili prima di postare ma ora sto usando il codice originale – Actung

risposta

24

Ti manca l'imbottitura in la conversione esadecimale. Ti consigliamo di utilizzare

function toHexString(byteArray) { 
    return Array.from(byteArray, function(byte) { 
    return ('0' + (byte & 0xFF).toString(16)).slice(-2); 
    }).join('') 
} 

in modo che ogni byte si trasformi esattamente a due cifre esadecimali. Il risultato previsto sarebbe 04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9

+0

Grazie a @Bergi il suo funzionamento :) – Actung

+0

Questo non funzionerà se byteArray è un array tipizzato che non può contenere valori stringa: se passi in un Uint8Array, il risultato della mappa sarà anche un Uint8Array, quindi un valore come "ff" non lo renderà join(). – grantpatterson

+0

@grantpatterson Ah, giusto. Fisso. – Bergi

1

È necessario eseguire il pad della conversione esadecimale con il numero appropriato di zeri iniziali.

1

Uso map() non funziona se l'ingresso è di un tipo simile Uint8Array: il risultato di map() è anche Uint8Array che non possono contenere i risultati di conversione di stringhe.

function toHexString(byteArray) { 
    var s = '0x'; 
    byteArray.forEach(function(byte) { 
    s += ('0' + (byte & 0xFF).toString(16)).slice(-2); 
    }); 
    return s; 
} 
Problemi correlati