问题描述
如何将字节数组转换为字符串?
我发现这些功能是相反的:
function string2Bin(s){
var b = new Array();
var last = s.length;
for(var i = 0; i var d = s.charCodeAt(i);
if(d b [i] = dec2Bin(d);
else {
var c = s.charAt(i);
alert(c +'不是ASCII字符');
b [i] = -1;
}
}
return b;
}
函数dec2Bin(d){
var b ='';
for(var i = 0; i b =(d%2)+ b;
d = Math.floor(d / 2);
}
return b;
}
但是如何使函数以其他方式工作?
谢谢。
Shao
您需要将每个八位字节解析为数字,并使用该值获取一个字符,如下所示:
function bin2String(array){
var result =;
for(var i = 0; i result + = String.fromCharCode(parseInt(array [i],2));
}
return result;
}
bin2String([01100110,01101111,01101111]); //foo
//使用string2Bin函数来测试:
bin2String(string2Bin(hello world))===hello world;
编辑:是,您当前的 string2Bin
可以写得更快:
function string2Bin(str){
var result = ];
for(var i = 0; i result.push(str.charCodeAt(i).toString(2));
}
return result;
}
但是通过查看你链接的文档,我认为 setBytesParameter
方法期望blob数组包含十进制数,而不是位字符串,因此您可以这样写:
函数string2Bin(str){
var result = [];
for(var i = 0; i result.push(str.charCodeAt(i));
}
return result;
}
函数bin2String(array){
return String.fromCharCode.apply(String,array);
}
string2Bin('foo'); // [102,111,111]
bin2String(string2Bin('foo'))==='foo'; // true
How do I convert a byte array into a string?
I have found these functions that do the reverse:
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;
}
But how do I get the functions working the other way?
Thanks.
Shao
You need to parse each octet back to number, and use that value to get a character, something like this:
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";
Edit: Yes, your current string2Bin
can be written more shortly:
function string2Bin(str) {
var result = [];
for (var i = 0; i < str.length; i++) {
result.push(str.charCodeAt(i).toString(2));
}
return result;
}
But by looking at the documentation you linked, I think that the setBytesParameter
method expects that the blob array contains the decimal numbers, not a bit string, so you could write something like this:
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
这篇关于在javascript中将字节数组转换为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!