gpt4 book ai didi

javascript - 在 Javascript 中将非 unicode 二进制字符串转换为字节数组

转载 作者:行者123 更新时间:2023-11-29 23:18:29 24 4
gpt4 key购买 nike

我使用 ajax 从 Web 服务器读取二进制文件。 HTTP 响应是 contentType: 'application/octet-stream' 并且包含一个二进制字符串,它只是一个字节串(不是 unicode),例如(十六进制):

0x00 0x08 0x17 0xA1 0x01

注意:在 C 中,这将在内存中表示为 5 个字节:

char buf[5] = {0, 8, 23, 161, 1}

...但在 Javascript 中,它是一个字符串,其 ASCII 表示类似于“�”(我实际上无法正确粘贴它,因为并非所有字符都有可打印的表示形式)。

我现在需要将其转换为字符或整数数组,以便我可以访问字符串中每个字符的数值。然而,使用 charCodeAt() 函数遍历示例字符串会返回:

[0] 0
[1] 8
[2] 23
[3] 65533
[4] 1

因为 charCodeAt() 解码 unicode 字符,而 0xA1 不被识别为有效的 unicode 字符所以 Replacement Character (65533) 被改用。

我想得到以下信息:

[0] 0
[1] 8
[2] 23
[3] 161
[4] 1

如何实现?

这是代码片段:

$.ajax({
url: url,
type: "get",
success: function(data) { // data contains binary representation of 0x00 0x08 0x17 0xA1 0x01
var byteTab = []
for (var n = 0; n < data.length; ++n) {
byteTab.push(data.charCodeAt(n))
}
})

最佳答案

更新:我不太确定 [default] Ajax 是否适合这种情况下的工作。无论文件大小如何,通常最好使用流来适应 future 的可扩展性,因为您当前的方法会一次性加载所有内容。

This article讨论了如何创建一个自定义的 ajax 传输来包装 XmlHttpRequest 以将数据加载到数组缓冲区中。您可以这样做,按顺序将字节插入您的主数组,然后从那里开始。

旧:我不确定我是否正确理解了您的数据表示,但我相信您可以使用 parseInt() 将十六进制字符串转换为十进制:

var data = ['0x00', '0x08', '0x17', '0xA1', '0x01'];
var parsed = [];

for(var i = 0; i < data.length; i++) {
parsed.push(parseInt(data[i], 16));
}

console.log(parsed);
console.log(parseInt('0xA1', 16))

如果这不是您的意思,请发表评论,我会尝试通过更具体的实现来更新我的答案。

关于javascript - 在 Javascript 中将非 unicode 二进制字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51737352/

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