当前位置:  开发笔记 > 编程语言 > 正文

在javascript中将字节数组转换为十六进制字符串转换

如何解决《在javascript中将字节数组转换为十六进制字符串转换》经验,为你挑选了3个好方法。

我有一个表单的字节数组[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



1> Bergi..:

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

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

这样每个字节就可以转换成两个十六进制数字.你的预期产量是04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9



2> 小智..:

map()如果输入的类型如Uint8Array:,则使用将不起作用:的结果map()Uint8Array不能保存字符串转换的结果。

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



3> AndyO..:

使用Array.reduce()更简洁,更高效(参见https://jsperf.com/byte-array-to-hex-string)替代方案:

function toHexString(byteArray) {
  return byteArray.reduce((output, elem) => 
    (output + ('0' + elem.toString(16)).slice(-2)),
    '');
}

(也没有"&0xFF",因为在我看来如果传入一个包含大于255的值的数组,输出应该搞乱,这样用户可以更容易地看到他们的输入是错误的.)

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有