ReactNative/JSuint8array转string convert uint8array to string
Posted Teng的世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ReactNative/JSuint8array转string convert uint8array to string相关的知识,希望对你有一定的参考价值。
客户端/服务器使用的protobuffer交互,客户端收到的是uint8array,面临着从unit8array转string,我使用的是下面的Crossplatform method
Working with node.js or other javascript platforms (multioperability), you'll find that some methods decide to return something different than a string. An Uint8Array is a typed array that represents an array of 8-bit unsigned integers.
The following list of methods , provide a collection of efficient ways to convert an Uint8Array to a regular string in javascript.
Little strings
The following method is acceptable for little arrays (>=100k characters), otherwise you'll get exceptions as RangeError : Maximum call stack size exceeded
or Out of stack space
. However you need to know that this method doesn't play good with UTF-8 characters.
function uint8arrayToStringMethod(myUint8Arr)
return String.fromCharCode.apply(null, myUint8Arr);
Browser implementation
If your javascript is being executed in a browser, you can make use of the TextEncoder
and TextDecoder
native functions which allow you to choose which codification you want to use. The Encoding API helps solving the string conversion problem.
/**
* Convert an Uint8Array into a string.
*
* @returns String
*/
function Decodeuint8arr(uint8array)
return new TextDecoder("utf-8").decode(uint8array);
/**
* Convert a string into a Uint8Array.
*
* @returns Uint8Array
*/
function Encodeuint8arr(myString)
return new TextEncoder("utf-8").encode(myString);
Crossplatform method
The following method is very useful and works pretty good. It doesn't use any hacks nor depends on Browser JS functions, e.g. works also in other JS environments. Works through the UTF-8 convention.
// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt
/* utf.js - UTF-8 <=> UTF-16 convertion
*
* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
* Version: 1.0
* LastModified: Dec 25 1999
* This library is free. You can redistribute it and/or modify it.
*/
function Utf8ArrayToStr(array)
var out, i, len, c;
var char2, char3;
out = "";
len = array.length;
i = 0;
while(i < len)
c = array[i++];
switch(c >> 4)
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += String.fromCharCode(c);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = array[i++];
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
return out;
Large blocks
If your data block is huge, you may want to use a method that works properly with huge data (an async method). In this case we'll create blob that contains our Uint8Array and then we'll use the file reader to read it as text.
/**
* Converts an array buffer to a string
*
* @param Uin8 uint8arr | The buffer to convert
* @param Function callback | The function to call when conversion is complete
*/
function largeuint8ArrToString(uint8arr, callback)
var bb = new Blob([uint8arr]);
var f = new FileReader();
f.onload = function(e)
callback(e.target.result);
;http://ourcodeworld.com/articles/read/164/how-to-convert-an-uint8array-to-string-in-javascript
f.readAsText(bb);
// Usage example
// "Hello" in Uint8Array format
var myuint8Arr = new Uint8Array([72, 101, 108, 108, 111, 32, 33]);
largeuint8ArrToString(myuint8Arr,function(text)
// Hello
console.log(text);
);
Note: as said before, this method is recommendable only if you handle huge datasets.
Have fun
原文连接:
以上是关于ReactNative/JSuint8array转string convert uint8array to string的主要内容,如果未能解决你的问题,请参考以下文章
剑指offer知识点List转int[],List转String,String转int,char[]转String,String 转char[],List转String[]
剑指offer知识点List转int[],List转String,String转int,char[]转String,String 转char[],List转String[]
剑指offer知识点List转int[],List转String,String转int,char[]转String,String 转char[],List转String[]