如何将缓冲区数组转换为十六进制?

How to convert Buffer array to hex?

当我调用我的 API 端点之一时,我在 JSON 对象中得到了一个缓冲区数组。我想将此数组转换为更 "usable" 的形式(十六进制?),以便我可以比较它们等。这是对象当前的样子:

"hash": {
  "type": "Buffer",
  "data": [
    151,
    14,
    51,
    26,
    46,
    52,
    5,
    151,
    99,
    107,
    38,
    188,
    138,
    180,
    76,
    56,
    108,
    214,
    135,
    213,
    125,
    134,
    105,
    139,
    129,
    236,
    206,
    157,
    67,
    1,
    12,
    12
  ]
}

我如何将此数组转换为十六进制(或字符串等)以便我可以比较哈希值?

使用Number.prototype.toString:

var json = '{"hash": {"type": "Buffer","data": [151,14,51]}}';
var parsed = JSON.parse(json);
document.write("data: " + JSON.stringify(parsed.hash.data) + "<br>");
document.write("hex: ");
parsed.hash.data.forEach(function(b) { document.write(("00" + b.toString(16)).substr(-2)); });

您可以创建一个新的 buffer 并将其转换为您需要的格式。

var o = {"hash": {
"type": "Buffer",
"data": [
  151,
  14,
  51,
  26,
  46,
  52,
  5,
  151,
  99,
  107,
  38,
  188,
  138,
  180,
  76,
  56,
  108,
  214,
  135,
  213,
  125,
  134,
  105,
  139,
  129,
  236,
  206,
  157,
  67,
  1,
  12,
  12
  ]
 }
}

console.log(new Buffer(o.hash,'hex').toString('hex'));
// 970e331a2e340597636b26bc8ab44c386cd687d57d86698b81ecce9d43010c0c

如果您有一个现有的 Buffer 对象,您可以通过以下方式将其表示为十六进制:

myBuffer.toString('hex')
// '970e331a2e340597636b26bc8ab44c386cd687d57d86698b81ecce9d43010c0c'