Ore*_*est 14 javascript arraybuffer
在JavaScript中从ArrayBuffer获取二进制字符串的方法是什么?
我不想编码字节,只是将二进制表示形式为String.
提前致谢!
pot*_*lad 16
以下代码将始终将ArrayBuffera 转换为a String并返回,而不会丢失或添加任何其他字节.
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));
}
}
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;
}
Run Code Online (Sandbox Code Playgroud)
我通过在这个jsfiddle中绕过以下值来测试它:http://jsfiddle.net/potatosalad/jrdLV/
(String) "abc" -> (ArrayBuffer) -> (String) "abc"
(String) "a?c" -> (ArrayBuffer) -> (String) "a?c"
(Uint8Array) [0,1,255] -> (ArrayBuffer) -> (String) -> (Uint8Array) [0,1,255]
(Uint16Array) [0,1,256,65535] -> (ArrayBuffer) -> (String) -> (Uint16Array) [0,1,256,65535]
(Uint32Array) [0,1,256,65536,4294967295] -> (ArrayBuffer) -> (String) -> (Uint32Array) [0,1,256,65536,4294967295]
Run Code Online (Sandbox Code Playgroud)
Jas*_*ner 14
近年来,通过在 JavaScript 中添加\xe2\x80\x93\xc2\xa0here\'s 一种将 Uint8Array 转换为二进制编码字符串的单行方法,使这一过程变得更加简单:
\nconst toBinString = (bytes) =>\n bytes.reduce((str, byte) => str + byte.toString(2).padStart(8, \'0\'), \'\');\nRun Code Online (Sandbox Code Playgroud)\n\n例子:
\nconsole.log(toBinString(Uint8Array.from([42, 100, 255, 0])))\n// => \'00101010011001001111111100000000\'\nRun Code Online (Sandbox Code Playgroud)\n\n如果您从 ArrayBuffer 开始,请创建缓冲区的 Uint8Array“视图”以传递到此方法:
\nconst view = new Uint8Array(myArrayBuffer);\nconsole.log(toBinString(view));\nRun Code Online (Sandbox Code Playgroud)\n\n来源:Libauth库(binToBinString 方法)
\nM S*_*ach -1
function string2Bin(s) {
var b = new Array();
var last = s.length;
for (var i = 0; i < last; i++) {
var d = s.charCodeAt(i);
if (d < 128)
b[i] = dec2Bin(d);
else {
var c = s.charAt(i);
alert(c + ' is NOT an ASCII character');
b[i] = -1;
}
}
return b;
}
function dec2Bin(d) {
var b = '';
for (var i = 0; i < 8; i++) {
b = (d%2) + b;
d = Math.floor(d/2);
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24331 次 |
| 最近记录: |