nodejs 将十进制转换为十六进制(00-00)并反转?

nodejs convert decimal to hex(00-00) and reverse?

所以我想向服务发送一个十六进制值。问题是服务需要特定格式的此十六进制值,00-00,并且还反转。

例如,当我想告诉服务我想要标签“1000”时:

1000 十进制在十六进制中是 3E8。简单。
现在服务需要格式 03-E8.
此外,该服务从右到左读取,因此最终值为 E8-03.

另一个例子,“3”将是 03-00


编辑: 我忘了说我不需要它作为字符串,而是作为 Uint8Array。所以我会用 new Uint8Array([232, 3]) 创建最终结果。 (等于 E8-03 = 1000)

所以一般的问题是:如何从 1000 的输入中得到 [232,3] 或从 3 中得到 [3, 0]?

是否有已经可以进行此转换的内置方法或软件包?

我不知道任何工具或包。我会做这样的事情:

const a = 1000;

const a0 = a % 256;
const a1 = Math.floor(a / 256);

const arr = new Uint8Array([a0, a1]);

console.log(arr);
const arrStr = []
arr.forEach((elem) => {
  const str = elem.toString(16).toUpperCase();
  if (str.length === 2) {
    arrStr.push(str);
  } else {
    arrStr.push('0' + str)
  }
});

console.log(arrStr.reverse().join('-'));

输出:

Uint8Array(2) [ 232, 3 ]
03-E8

可能有更简单的方法,但这里有一个简单的解决方案。

编辑:如果您需要至少两对,您可以更改 padStart 的第一个参数。

function dec2hexUi8Arr (n) {
    const hex = (n).toString(16);
    const len = hex.length;
    const padLen = len + (len % 2);
    const hexPad = hex.padStart(Math.max(padLen, 4), '0');
    const pairs  = hexPad.match(/../g).reverse().map(p => parseInt(p, 16));
    const ui8Arr = new Uint8Array(pairs);
    return ui8Arr;
}

const vals = [
  1000,
  3,
  65536
].map(dec2hexUi8Arr);

console.log (vals);