如何在Javascript中将十六进制字符串转换为字节,将字节转换为十六进制字符串?

时间:2014-04-06 23:19:48

标签: javascript node.js

如何将字符串中表示的十六进制代码转换为字节,反之亦然?

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将传入的数据字符串解码为正确的十六进制(我也使用了utf8与字节,因为它看起来像打印到控制台时的传入字符串),所以我很困惑......

我还发现了这两个原生的javascript函数,解码器在我的传入流上工作,但我仍然无法得到十六进制编码......

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

2 个答案:

答案 0 :(得分:27)

这是一个node.js特定方法,利用节点标准库提供的Buffer类。

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

获取字节(0-255)值:

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

转回来:

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

要转换为utf8:

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

答案 1 :(得分:3)

您可以使用Number.prototype.toStringparseInt

关键是利用radix参数为您进行转化。

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