gpt4 book ai didi

javascript - 使用 WebSocket 发送位

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

如果我有一个包含 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/

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