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

如何在Javascript中将十六进制字符串转换为字节,将字节转换为十六进制字符串?,javascript,node.js,Javascript,Node.js,如何将字符串中表示的十六进制代码转换为字节,并在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

如何将字符串中表示的十六进制代码转换为字节,并在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将传入的数据字符串解码为正确的十六进制(我也使用utf8 vs.byte,因为它在打印到控制台时“看起来”像传入的字符串),所以我很困惑

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

function encode_utf8( s ) {
  return unescape( encodeURIComponent( s ) );
}
function decode_utf8( s ) {
  return decodeURIComponent( escape( s ) );
}
你可以利用和

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

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


这里有一种特定于node.js的方法,它利用了节点标准库提供的缓冲区类

要获取字节(0-255)值,请执行以下操作:

以及转换回:

Buffer.from([128]).toString('hex');
// outputs '80'
要转换为utf8,请执行以下操作:

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

我不确定我是否明白,您是否希望类似于
5648
的东西作为bytestring?没有一个字节。不确定我在这里如何表示…字节!=二进制,所以不是我需要的。嗯,我知道现在已经太迟了,但我修改了
parseInt
将其转换为十进制,而不是二进制。感谢善良的陌生人投了反对票,让我注意到这一点!这仍然是错误的。十六进制“十六进制字符串”是16个基数。此外,不可能从这些方法中获得真正的字节。这将在浏览器和节点中返回一个字符串。并对整数进行运算。也许,使用新的
Int8Array
类型化数组,这是可能的。未经测试<代码>parseInt('0x80',16);//128和
(128)。toString(16);//'80'
这是否适用于多个十六进制值?(我实际上有几个十六进制值组成字符串)是的,绝对是。它将使用任何长度的十六进制编码字符串。您可以使用
[n]
表示法获取每个位置的字节,并可以通过
.toString('utf8')
将整个字符串转换为utf8表示形式。自Node.js 6.0.0以来,
新缓冲区(大小)
已被弃用。请改用
Buffer.alloc(16,'hex').toString('utf8')
Buffer.from('80', 'hex').toString('utf8');