如果我有一个包含 1 和 0 的字符串,如下所示:
“0101101”
我是否可以使用 WebSocket.prototype.send 方法仅发送这些位?
首先我必须将它们转换为 ArrayBuffer,我该怎么做?
如果我只是发送字符串,每个 1 和 0 都是 1 个字节长(因为它们是字符而不是位,并且是 UTF-8 编码的),那是行不通的,我怎样才能将这些字符串位转换为ArrayBuffer 并发送它们?
不,这不是重复,因为它不是将位字符串转换为 int 值。这是关于将其转换为 ArrayBuffer
最佳答案
正如您已经暗示的那样,没有直接的方法可以通过 websocket api 直接发送位数组。您需要将其转换为 ArrayBuffer。由于 ArrayBuffer 不能直接修改,只能通过 TypedArray 修改,所以我建议:
- 可以根据需要在字符串前面添加前导零
- 将字符串拆分为 8 位部分
- 从位中解析整数
- 将这些整数添加到 Uint8Array
- 从数组中获取缓冲区
- 通过 websocket 发送缓冲区
这可能如下所示:
function binaryStringToArrayBuffer(data) {
while (data.length % 8 != 0) {
data = '0' + data;
}
var buf = new ArrayBuffer(data.length / 8);
var result = new Uint8Array(buf);
var dataArray = data.split('');
var idx = 0;
while(dataArray.length > 0) {
var bits = dataArray.splice(0, 8);
var bitsAsInt = parseInt(bits.join(''), 2);
result[idx] = bitsAsInt;
idx++;
}
return result.buffer;
}
var data = "01010111101011010111110001100000000000000101001";
var buffer = binaryStringToArrayBuffer(data);
getYourWebSocket().send(buffer);
关于javascript - 使用 WebSocket 发送位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142238/