将无符号整数转换为字节为整数的256位(BE)表示的字符串?
假设我是整数1832(或十六进制的0x728)。然后转换结果应该是字符串,其字节是整数的256位大端表示,即0x00 0x00 ... 0x07 0x28
(字符串可能包含不可读的ASCII字符)。
我需要这个,因为我的web API应该以256位二进制形式返回算术运算的结果。
有关在JavaScript / Nodejs中有效执行此操作的任何想法吗?
答案 0 :(得分:1)
以下是将32位JavaScript整数转换为256位BE形式的另一种实现:
function intTo256BigEndianString(n) {
var result = "";
for (var i = 0; i < 28; i++) {
result += String.fromCharCode(0x00);
}
result += String.fromCharCode((n >> 24) & 0xFF);
result += String.fromCharCode((n >> 16) & 0xFF);
result += String.fromCharCode((n >> 8) & 0xFF);
result += String.fromCharCode((n >> 0) & 0xFF);
return result;
}
基本上,只返回一个字符串,其字符是整数的字节。
答案 1 :(得分:0)
Javascript整数可以表示为32位。我们只需要将它们作为8位序列读取并将它们转换为字符串:
function intToBE(int){
return [
int >> 24,
(int >> 16) & 0b11111111,
(int >> 8) & 0b11111111,
int & 0b11111111
].reduce((s,n) => s+("0"+n).substr(-2),"");
}
(这个减少构造只是添加正确数量的0的必要条件)
循环完成整个过程:
function intToBE(int){
var res = "";
for(var i = 3; i >= 0; i--){
res += ("0"+ ((int >> i*8) & 0b11111111)).substr(-2);
}
return res;
}
由于ES6有类型数组,非常适合这种转换:
function intToBE(int){
return
new Uint8Array(
new Uint32Array([int]).buffer
).reduceRight(
(r,c)=>r+("0"+c).substr(-2)
,""
);
}
答案 2 :(得分:0)
采取以下代码:
let o = parseInt(1832).toString(2);
let arr = [];
for(let i=0;i<256-o.length;i++)
{
arr.push(0)
}
let b = arr.join("")+o;
let j=0;
let k=j+8;
let arr2 = [];
while (k<256)
{
let temp = b.slice(j,k);
let temp1 = parseInt(temp,2).toString(16);
(temp1.length==1)&&(temp1='0'+temp1);
arr2.push('0x'+temp1);
j=k;
k=j+8;
}
console.log(arr2.join(" "));
返回0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07