0
這個問題已經收到過去的答案,但我肯定會說它仍然沒有回答。ArrayBuffer to String,String to ArrayBuffer方法
幾乎有關於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
您可以顯示您使用的示例輸入嗎?第一個代碼工作正常lorem ipsum。 – Qwerty
我上傳圖像文件,使用filereader讀取爲arraybuffer,然後將內容發送到ab2str –
也許文件大小太大,會導致更多的調用堆棧? –