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

sha*_*un5 13 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'???
Run Code Online (Sandbox Code Playgroud)

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

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

function encode_utf8( s ) {
  return unescape( encodeURIComponent( s ) );
}
function decode_utf8( s ) {
  return decodeURIComponent( escape( s ) );
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ber 28

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

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

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

Buffer.from('80', 'hex')[0];
// outputs 128
Run Code Online (Sandbox Code Playgroud)

并转换回来:

Buffer.from([128]).toString('hex');
// outputs '80'
Run Code Online (Sandbox Code Playgroud)

要转换为utf8:

Buffer.from('80', 'hex').toString('utf8');
Run Code Online (Sandbox Code Playgroud)

  • 从Node.js 6.0.0开始,不推荐使用new Buffer(size)。请改用`Buffer.alloc(16,'hex')。toString('utf8')` (2认同)

thg*_*ell 6

您可以使用Number.prototype.toStringparseInt

关键是利用radix参数为你做转换。

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

  • 嗯,我知道这太晚了,但我修复了 `parseInt` 以转换为十进制而不是二进制。感谢善良的陌生人投反对票让我注意到这一点! (2认同)