将Uint8Array转换为node.js中的等效十六进制字符串

yb3bgrhw  于 2023-01-30  发布在  Node.js
关注(0)|答案(4)|浏览(934)

我使用的是node.js v4.5。假设我有这个Uint8Array变量。

var uint8 = new Uint8Array(4);
uint8[0] = 0x1f;
uint8[1] = 0x2f;
uint8[2] = 0x3f;
uint8[3] = 0x4f;

这个数组可以是任意长度,但我们假设长度为4。
我想有一个函数,将uint8转换为十六进制字符串等效。

var hex_string = convertUint8_to_hexStr(uint8);
//hex_string becomes "1f2f3f4f"
cotxawn7

cotxawn71#

您可以先使用Buffer.from(),然后再使用toString('hex')

let hex = Buffer.from(uint8).toString('hex');
pbossiut

pbossiut2#

另一种解决方案:
将int8转换为十六进制的基本函数:

// padd with leading 0 if <16
function i2hex(i) {
  return ('0' + i.toString(16)).slice(-2);
}

reduce

uint8.reduce(function(memo, i) {return memo + i2hex(i)}, '');

或者mapjoin

Array.from(uint8).map(i2hex).join('');
m3eecexj

m3eecexj3#

Buffer.from具有多个覆盖。
如果直接使用uint8调用它,则它不必要地复制其内容,因为它选择Buffer.from( <Buffer|Uint8Array> )版本。
您应该调用Buffer.from( arrayBuffer[, byteOffset[, length]] )版本,该版本不复制,而只是创建缓冲区的视图

let hex = Buffer.from(uint8.buffer,uint8.byteOffset,uint8.byteLength).toString('hex');
w8f9ii69

w8f9ii694#

缓冲区特定于nodeJS。
这是一个在任何地方都适用的版本:

const uint8 = new Uint8Array(4);
uint8[0] = 0x1f;
uint8[1] = 0x2f;
uint8[2] = 0x3f;
uint8[3] = 0x4f;

function convertUint8_to_hexStr(uint8) {
  Array.from(uint8)
    .map((i) => i.toString(16).padStart(2, '0'))
    .join('');
}

convertUint8_to_hexStr(uint8);

相关问题