tl; dr-我需要一个与struct.pack("!I", <num_here>)
等效的js
我正在尝试为我不久前构建的python聊天服务器创建电子前端。当我建立上述服务器时,我将其设置为使所有数据都位于json中,并在发送数据时以消息长度作为前缀(通过struct.pack
打包),以便我可以确定何时得到了所有数据。因此,如果我有'{"USERNAME" : "codeWonderland"}'
,我会在其前面加上\x00\x00\x00\x1e
我找到了库bufferpack,但是每次使用pack操作时,库都会不断返回\x00\x00\x00\x00
。该库也有很多分支,但是所有更改都是任意的。此外,我自己尝试修复该库,但实际上每个变量只是一个字母,因此很难解析。
有什么方法可以更轻松地完成打包?我真的不需要担心拆包,因为当从服务器接收到json时,我可以从字面上直接使用json上的json,从字符串中修剪长度并正常解析。
答案 0 :(得分:1)
怎么样?
const output = document.getElementById('output');
function bigEndianOf(n)
{
return Uint8Array.from([
(n & 0xFF000000) >>> 24,
(n & 0x00FF0000) >>> 16,
(n & 0x0000FF00) >>> 8,
(n & 0x000000FF) >>> 0,
]);
}
document.getElementById('text').addEventListener('change', e => {
const prefix = new TextDecoder('utf-8').decode(bigEndianOf(e.target.value.length));
output.value = prefix;
})
text: <input id="text" /><br />
length prefix string: <input id="output" readonly />