关于node.js:如何在Javascript中将十六进制字符串转换为字节,将字节转换为十六进制字符串?

How to convert a hex string to a byte and a byte to a hex string in Javascript?

如何将字符串中表示的十六进制代码转换为字节,并在JavaScript中进行相反的转换?

1
2
3
4
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与byte,因为它在打印到控制台时"看起来"像传入的字符串),所以我很困惑…

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

1
2
3
4
5
6
function encode_utf8( s ) {
  return unescape( encodeURIComponent( s ) );
}
function decode_utf8( s ) {
  return decodeURIComponent( escape( s ) );
}


这里有一个node.js特定的方法,利用了node标准lib提供的缓冲区类。

https://nodejs.org/api/buffer.html buffer buffers和character编码

要获取字节(0-255)值:

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

转换回:

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

要转换为utf8:

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


您可以使用number.prototype.toString和parseInt。

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

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