在javascript中将字节数组转换为字符串 [英] Converting byte array to string in javascript

查看:3593
本文介绍了在javascript中将字节数组转换为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将字节数组转换为字符串?



我发现这些功能是相反的:

  function string2Bin(s){
var b = new Array();
var last = s.length;

for(var i = 0; i var d = s.charCodeAt(i);
if(d <128)
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 <8; 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中将字节数组转换为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆