在 javascript 中将字节数组转换为字符串?

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

我找到一些函数,但是实现的功能正相反:

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;
}

如何让修改这些函数,让其以我需要的方式执行呢?

谢谢。

原文由 user385579 发布,翻译遵循 CC BY-SA 4.0 许可协议
阅读 1.9k
2 个回答

需要将每个八位字节解析回数字,并使用该值来获取一个字符,如下所示:

 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 可以更短地编写:

 function string2Bin(str) {
 var result = [];
 for (var i = 0; i < str.length; i++) {
 result.push(str.charCodeAt(i).toString(2));
 }
 return result;
 }

但是通过查看链接的文档,我认为 setBytesParameter 方法需要 blob 数组包含十进制数字,而不是 _位字符串_,因此可以编写如下内容:

 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
原文由 Christian C. Salvadó 发布,翻译遵循 CC BY-SA 2.5 许可协议

ES6更新

现在,字符串 ‘foo’ 也等于 String.fromCharCode(...[102, 111, 111])

原答案

只需 apply 你的字节数组到 String.fromCharCode 。例如

String.fromCharCode.apply(null, [102, 111, 111]) 等于’foo’。

MDN 文档 在这里

警告:适用于短于 65535 的数组 - MDN 文档 在这里

原文由 Bogdan D 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题