gpt4 book ai didi

javascript - ArrayBuffer 到 String、String 到 ArrayBuffer 方法

转载 作者:行者123 更新时间:2023-11-27 22:59:34 25 4
gpt4 key购买 nike

这个问题过去已经得到了答案,但我肯定地说它仍然没有得到答案。

一般来说,几乎都有关于 ArrayBuffers 的文档,更不用说特定应用程序了。我已经研究了好几天了,没有结果。

本质上,我需要尝试将从文件读取器(此处: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer )获得的 ArrayBuffer 转换为字符串,然后将该字符串转换回相同的 ArrayBuffer。

例如,我尝试过这些方法

function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}

function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return b

我收到以下错误:“Uint16Array 的字节长度应该是 2 的倍数”

我还尝试了以下方法

function StringToUint8Array(string) {
var binary, binLen, buffer, chars, i, _i;
binary = StringToBinary(string);
binLen = binary.length;
buffer = new ArrayBuffer(binLen);
chars = new Uint8Array(buffer);
for (i = _i = 0; 0 <= binLen ? _i < binLen : _i > binLen; i = 0 <= binLen ? ++_i : --_i) {
chars[i] = String.prototype.charCodeAt.call(binary, i);
}
return chars;
}

function ArrayBufferToString(buffer) {
return BinaryToString(String.fromCharCode.apply(null, Array.prototype.slice.apply(new Uint8Array(buffer))));
}

function StringToArrayBuffer(string) {
return StringToUint8Array(string).buffer;
}

function BinaryToString(binary) {
var error;

try {
return decodeURIComponent(escape(binary));
} catch (_error) {
error = _error;
if (error instanceof URIError) {
return binary;
} else {
throw error;
}
}
}

function StringToBinary(string) {
var chars, code, i, isUCS2, len, _i;

len = string.length;
chars = [];
isUCS2 = false;
for (i = _i = 0; 0 <= len ? _i < len : _i > len; i = 0 <= len ? ++_i : --_i) {
code = String.prototype.charCodeAt.call(string, i);
if (code > 255) {
isUCS2 = true;
chars = null;
break;
} else {
chars.push(code);
}
}
if (isUCS2 === true) {
return unescape(encodeURIComponent(string));
} else {
return String.fromCharCode.apply(null, Array.prototype.slice.apply(chars));
}
}

并收到此错误:超出最大调用堆栈大小

对于以下转换似乎没有好的方法:AB --> String ||字符串 -> AB

最佳答案

现在大多数浏览器都有 TextEncoderTextDecoder ,节点有 util.TextEncoderutil.TextDecoder 。此 WHATWG 标准提供了在字节数组(具有 buffer 属性)和字符串之间进行转换的简单方法:

const str = new TextDecoder().decode(byteArray);
const byteArray = new TextEncoder().encode(str);
const buffer = byteArray.buffer;

关于javascript - ArrayBuffer 到 String、String 到 ArrayBuffer 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234333/

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