2014-04-06 16 views
8

Come si converte un codice esadecimale rappresentato in una stringa in un byte e il contrario in Javascript?Come convertire una stringa esadecimale in un byte e un byte in una stringa esadecimale in Javascript?

var conv = require('binstring'); 
var hexstring ='80'; 
var bytestring = conv(hexstring, {in:'hex', out:'utf8'}); 
var backtohexstring = conv(bytestring, {in:'utf8', out:'hex'}); // != '80'??? 

backtohexstring decodifica una stringa di dati in entrata per l'esagono corretta (Ho anche usato utf8 vs byte, perché 'sembrava' come la corda in entrata in fase di stampa alla console), quindi sono confuso ...

ho anche trovato queste due funzioni JavaScript native, il decoder funziona sul mio flusso in entrata, ma ancora non può ottenere l'esagono di codificare ...

function encode_utf8(s) { 
    return unescape(encodeURIComponent(s)); 
} 
function decode_utf8(s) { 
    return decodeURIComponent(escape(s)); 
} 
+0

Non sono sicuro di averlo capito, ti aspetti? qualcosa come '5648' come da test? – adeneo

+0

Nessun byte. Non sono sicuro di come lo rappresenterei qui ... – shaun5

risposta

18

Ecco un approccio node.js specifica, sfruttando la classe di buffer fornito dal lib standard di nodo.

https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings

Per ottenere il byte (0-255) Valore:

Buffer.from('80', 'hex')[0]; 
// outputs 128 

E per riconvertire:

Buffer.from([128]).toString('hex'); 
// outputs '80' 

Convertire in utf8:

Buffer.from('80', 'hex').toString('utf8'); 
+0

Questo funzionerebbe per più valori esadecimali? (In realtà ho diversi valori esadecimali che compongono la stringa) – shaun5

+0

Sì, sicuramente. Funzionerà con una stringa con codifica esadecimale di qualsiasi lunghezza. Puoi ottenere i byte in ogni posizione usando la notazione '[n]', e puoi convertire l'intera stringa in una rappresentazione utf8 tramite '.toString ('utf8')'. –

+0

Dato che Node.js 6.0.0, il 'nuovo Buffer (dimensione)' è stato deprecato. Si prega di usare 'Buffer.alloc (16, 'hex'). ToString ('utf8')' invece –

2

si può fare uso di Number.prototype.toString e parseInt .

La chiave consiste nell'utilizzare i parametri radix per eseguire le conversioni per conto dell'utente.

var bytestring = Number('0x' + hexstring).toString(10); // '128' 
parseInt(bytestring, 2).toString(16); // '80' 

+1

byte! = Binario, quindi non quello di cui ho bisogno. – shaun5

+2

huh, so che è super tardi, ma ho corretto 'parseInt' per convertirlo in decimale anziché in binario. grazie gentile estraneo per il voto negativo per portare la mia attenzione a questo! – thgaskell

Problemi correlati