gpt4 book ai didi

javascript - 将十六进制数转换为数组

转载 作者:行者123 更新时间:2023-12-03 00:23:53 25 4
gpt4 key购买 nike

我想将十六进制数(假设为 0xABCDEF)转换为数组(0xABCDEF --> [0xAB;0xCD;0xEF]

我已经测试了这段代码:

  generateHexaArrayOf2FromHexaNumber (hexaNb){  
var size = 1;
var hexaNbTempo = hexaNb;

while ((hexaNbTempo / 0xFF) > 1) {
hexaNbTempo = hexaNbTempo / 0xFF;
size++;
}

var hexaArray = new Array(size);
for (var i= 0; hexaNb > 0; i++) {
hexaArray[i] = hexaNb % 0xFF
hexaNb = Math.floor(hexaNb / 0xFF) // round to lower
}
hexaArray.reverse();
return hexaArray;
}

结果以 ASCII 格式返回,而不是以十六进制格式返回(有以 0xABCDEF 作为条目,它返回 [173(=0xAD), 39(=0x27), 105(=0x69)]

你知道为什么这是错误的以及如何纠正它吗?

最佳答案

将所有 0xFF 替换为 0x100。毕竟,您正在尝试创建一个 base-256 数组,而不是一个 base-255 数组。

此外,您确实不需要大小计算。您也可以直接返回 hexaArray.reverse() 。另外,使用 push 而不是直接属性分配。您的代码还将输入 0 的数组留空,但您不希望 [0] 作为输出吗?

您还可以使用 .unshift 代替 .push 并删除 .reverse()

更正的代码:

function generateHexaArrayOf2FromHexaNumber(hexaNb) {
var hexaArray = [];

for (var i = 0; hexaNb > 0; i++) {
hexaArray.push(hexaNb % 0x100);
hexaNb = Math.floor(hexaNb / 0x100);
}

if(!hexaArray.length){
hexaArray.push(0);
}

return hexaArray.reverse();
}

console.log(generateHexaArrayOf2FromHexaNumber(0x1)); // => [ 1 ]
console.log(generateHexaArrayOf2FromHexaNumber(0xabcdef)); // => [ 171, 205, 239 ]
console.log(generateHexaArrayOf2FromHexaNumber(0xabcdef).map((x) => x.toString(16).padStart(2, "0"))); // => [ "ab", "cd", "ef" ]
console.log(generateHexaArrayOf2FromHexaNumber(0xdeadbeef).map((x) => x.toString(16).padStart(2, "0"))); // => [ "de", "ad", "be", "ef" ]
console.log(generateHexaArrayOf2FromHexaNumber(0x0).map((x) => x.toString(16).padStart(2, "0"))); // => [ "00" ]

关于javascript - 将十六进制数转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com