gpt4 book ai didi

javascript - 无法将消息包字节读入js中的Uint8Array缓冲区

转载 作者:行者123 更新时间:2023-12-05 07:38:50 27 4
gpt4 key购买 nike

我花了最后一个小时尝试在 Python 和 Javascript(好吧,ClojureScript ...)之间使用 messagepack 做一个简单的 hello world。出于某种原因,我无法将 msgpack 有效负载正确读入 javascript 缓冲区。

我正在使用 msgpack-pythonmsgpack-lite

python

在 Python 中,我生成我的有效载荷并写入二进制文件,如下所示:

bts = msgpack.packb({"blah": 1, "bleh": [0, 1]}, default=encode)
with open('/tmp/sample.msgpack', 'wb') as f:
f.write(bts)

这条消息似乎是正确的,因为我可以在 https://kawanet.github.io/msgpack-lite/ 中验证它的 hexdump ,虽然我确实需要在生成的字符串中添加空格......我使用以下行来生成十六进制表示:

codecs.getencoder('hex_codec')(bts)[0]`)
# b'82a4626c6568920001a4626c616801'

Javascript

我正在使用 http-server -p 3000 --cors 提供这个二进制文件。 Javascript 领域中简单 GET 的响应正文如下:�bleh���blah。我的问题是我无法将它正确加载到 Uint8Array 中:

Uint8Array.from(body)
// Uint8Array(15) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
new Uint8Array(body)
// Uint8Array(0)

我做错了什么?显然,有效负载并不像我们在困惑的字节表示中看到的那样全为零。我也很惊讶使用 .from() 生成了一个正确长度的数组,但随后无法设置内容。

最佳答案

我假设您收到了一个 blop,我遇到了类似的问题并通过使用 FileReader 解决了它并将其作为缓冲区字符串读取。

const reader = new FileReader()
reader.readAsBinaryString(body)
reader.onload = function(e) {
const data = e.target.result
var buffer = new Uint8Array(data.length)
for (let i = 0; i < data.length; i++) {
buffer[i] = data.cahrCodeAt(i)
}
const decoded = msgpack.decode(buffer)
console.log(decoded) // <-- Your unpacked message
}

关于javascript - 无法将消息包字节读入js中的Uint8Array缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525825/

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