为了账号安全,请及时绑定邮箱和手机立即绑定

如何在数组缓冲区中存储 32 位整数?

如何在数组缓冲区中存储 32 位整数?

慕斯709654 2021-11-12 18:16:38
好像没看懂Uint32Array。根据我所读到的,Uint8Array我可以在数组(Uint8Array([16])或Uint8Array([96,56]))中输入一个数字,结果就是这样。但是,当我对更大的数字(如 )尝试相同的操作时Uint32Array([21640]),它似乎会截断它。21640 在十六进制中应该等于 5488,我只得到 88。这实际上是如何工作的?编辑:阐述我还试图将几个 ArrayBuffers 连接在一起。如果我没有记错readAsArrayBuffer会产生一个Uint8Array,并且我正在尝试使用https://gist.github.com/72lions/4528834附加一些 32 位数字有如此多的信息和示例,但Uint8Array很少有内容Uint32Array让我认为这 32 个中的一个会存储一个值,就好像它是 8 个中的 4 个一样。
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

无符号 8 位数字的最大值是 255。较大的数字将被截断或翻转,具体取决于 os/cpu。如果您想在 8 位数组中转换 32 位数字,请尝试这样的操作。


var number = 21640;

var byte1 = 0xff & number;

var byte2 = 0xff & (number >> 8);

var byte3 = 0xff & (number >> 16);

var byte4 = 0xff & (number >> 24);


var arr1 = Uint8Array([byte1,byte2,byte3,byte4]);

创建数组时,只需颠倒字节的顺序,具体取决于您想要小端还是大端。


查看完整回答
反对 回复 2021-11-12
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这是一个在控制台中显示 5488 的工作示例


    var bigNumber = new Uint32Array([21640]);

    console.log(bigNumber[0].toString(16));

由于您在问题中添加了更多内容。如果你想转换


var byte1 = 0x88;

var byte2 = 0x54;

var byte3 = 0;

var byte4 = 0;


var bigValue = (byte4 << 24) | (byte3 << 16) | (byte2 << 8) | (byte1);


console.log(bigValue);

尽管您需要考虑字节顺序


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信