gpt4 book ai didi

javascript - 在javascript中将值转换为bytearray

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:56 24 4
gpt4 key购买 nike

我正在使用二进制帧编写基于 WebSocket 网络的应用程序。我想将值从 Python 服务器发送到 JS 客户端并返回。

据我所知,打包超过 8 位的值在解包和打包时取决于字节序。不幸的是,浏览器似乎以小端方式发送所有内容,而网络是大端方式。所以我读到最好的想法是将所有值打包到字节数组中,这样字节序就无关紧要了。

我为 javascript 编写了这个函数:

valueToByteArray: function(value, bytes_length) {
var bytes_array = [];
for (var i=bytes_length - 1; i>=0; --i) {
conjunction_val = 0xFF << i*8;
shift = i*8;
bytes_array.push((value & conjunction_val) >> shift);
}
return bytes_array;
}

我有测试:

test("Pack value to Byte array", function() {
equal(
BufferUtility.valueToByteArray(-2000000, 4),
[255, 225, 123, 128],
"Value packed OK"
); // fail returns [-1, 225, 123, 128], same function in python returns [255L, 225, 123, 128]
equal(
BufferUtility.valueToByteArray(4000000, 4),
[0, 61, 9, 0],
"Value packed OK"
); // pass
equal(
BufferUtility.valueToByteArray(0, 2),
[0, 0],
"Value packed OK"
); // pass
equal(
BufferUtility.valueToByteArray(-1, 2),
[128, 1],
"Value packed OK"
); // fail returns [255, 255]
});

但只有第二次和第三次测试通过,它似乎不适用于带符号的值。我还在 Python 上检查了这个值,它看起来像 struct.pack('>h', -1)\xFF\xFF。老实说,我不明白。由于 MSb 是符号位,因此 shortint -1 二进制应该是 imo 1000000000000001

我做错了什么,也许有更好的方法来解决字节序问题?

最佳答案

我从 Freenode 上的#javascript 获得了这段代码,它的工作令人惊讶,即使它以不同的方式做完全相同的事情:|

function valueToByteArray(value, bytes_length) {
var bytes_array = [];
while (bytes_length > 0){
var byte = value & 0xFF;
value >>= 8;
bytes_length--;

bytes_array.push(byte);
}
return bytes_array.reverse();
}

console.log(valueToByteArray(-2000000, 4));
<< [255, 225, 123, 128]

关于javascript - 在javascript中将值转换为bytearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982873/

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