如何将字节数组转换为字符串?
我发现这些功能相反:
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; }
但是,如何使功能以其他方式起作用?
谢谢。
o
您需要将每个八位位组解析回数字,并使用该值来获取字符,如下所示:
function bin2String(array) { var result = ""; for (var i = 0; i < array.length; i++) { result += String.fromCharCode(parseInt(array[i], 2)); } return result; } bin2String(["01100110", "01101111", "01101111"]); // "foo" // Using your string2Bin function to test: bin2String(string2Bin("hello world")) === "hello world";
编辑: 是的,您的当前时间string2Bin可以写得更短:
string2Bin
function string2Bin(str) { var result = []; for (var i = 0; i < str.length; i++) { result.push(str.charCodeAt(i).toString(2)); } return result; }
但是通过查看您链接的文档,我认为该setBytesParameter方法期望blob数组包含十进制数字,而不是 位字符串 ,因此您可以编写如下内容:
setBytesParameter
function string2Bin(str) { var result = []; for (var i = 0; i < str.length; i++) { result.push(str.charCodeAt(i)); } return result; } function bin2String(array) { return String.fromCharCode.apply(String, array); } string2Bin('foo'); // [102, 111, 111] bin2String(string2Bin('foo')) === 'foo'; // true