带有endianess的二进制数据转换为JavaScript

时间:2015-08-26 11:35:00

标签: javascript binary-data memory-address endianness arraybuffer

我收到二进制数据作为字符串,如何使用小端CPU将其转换为JS数字? ArrayBuffer,DataView有用吗?

这不仅仅是基数转换问题

16 in 2 radix是10000而不是10000000

但我必须转换内存地址并获取数字值。

var binary = "10000000"; // 16

parseInt("10000000", 2) // 128

// Buffer 10 00 00 00
// Little Endian 00 00 00 10
// 0x00000010 => 16

这是手动回答lodash。但我想知道使用ArrayBuffer和DataView的JavaScript方法。

var _ = require('lodash');
var endianness = null;

(function () {
    var b = new ArrayBuffer(4);
    var a = new Uint32Array(b);
    var c = new Uint8Array(b);
    a[0] = 0xdeadbeef;
    if (c[0] === 0xef) {
        return endianness = 'LE';
    } else if (c[0] === 0xde) {
        return endianness = 'BE';
    }
    throw new Error('Unknown endianness');
})();

function toInt(binStr) {
    if (binStr % 2 !== 0) {
        throw new Error('Invalid binary string');
    }

    var arr = _.chunk(binStr, 2);

    if (endianness === 'LE') {
        arr = arr.reverse();
    }

    var converted = _.flatten(arr).join('');

    return parseInt(converted, 16);
}

感谢您的支持!

0 个答案:

没有答案