javascript中的字节数组到十六进制字符串的转换

新手上路,请多包涵

我有一个形式为 [4,-101,122,-41,-30,23,-28,3,..] 的字节数组,我想将其转换为 6d69f597b217fa333246c2c8 我正在使用下面的函数

function toHexString(bytes) {
  return bytes.map(function(byte) {
    return (byte & 0xFF).toString(16)
  }).join('')
}

这给了我一个相同形式的字符串,但我怀疑这不是一个有效的转换,因为十六进制字符串比预期的要短一些。我认为翻译应该得到“0a10a6dc”。请告诉我我是否错了或者这是一个正确的转换但也许我没有使用正确的字节数组

字节数组 4,-127,45,126,58,-104,41,-27,-43,27,-35,100,-50,-77,93,-16,96,105,-101,-63,48,-105,49,-67,110,111,26,84,67,-89,-7,-50,10,-12,56,47,-49,-42,-11,-8,-96,-117,-78,97,-105,9,-62,-44,-97,-73,113,96,23,112,-14,-62,103,-104,90,-14,117,78,31,-116,-7

对应转换 4812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ceaf4382fcfd6f5f8a08bb261979c2d49fb771601770f2c267985af2754e1f8cf9

原文由 Actung 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 768
2 个回答

您缺少十六进制转换中的填充。你会想要使用

function toHexString(byteArray) {
  return Array.from(byteArray, function(byte) {
    return ('0' + (byte & 0xFF).toString(16)).slice(-2);
  }).join('')
}

以便每个字节转换为恰好两个十六进制数字。您的预期输出将是 04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

Using map() won’t work if the input is of a type like Uint8Array : the result of map() is also Uint8Array which can’ t 保存字符串转换的结果。

 function toHexString(byteArray) {
  var s = '0x';
  byteArray.forEach(function(byte) {
    s += ('0' + (byte & 0xFF).toString(16)).slice(-2);
  });
  return s;
}

原文由 grantpatterson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题