javascript 在浏览器中将二进制字符串转换为big endian整数?

ohfgkhjo  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(139)

下面是一个二进制的字符串:

const bin = '\x00\x00\x16%'

我想把它转换成big endian整数。
我可以使用以下代码来完成此操作:

new DataView(Uint8Array.from('\x00\x00\x16%', c => c.charCodeAt(0)).buffer).getInt32(0, false)
=> 5669

但是我非常肯定有一种更简单的方法来实现这一点,而不是转换为Uint8Array,然后将其传递给数据视图。
(Note:这只适用于浏览器,不适用于Node.js。我看到了所有关于Buffer.readUIntBE的SO帖子,但它们不是浏览器自带的。)

5gfr0r5j

5gfr0r5j1#

function bin2int(bin) {
            var i = 0;
            var len = bin.length;
            var num = 0;
            while (i < len) {
                num <<= 8;
                num += bin.charCodeAt(i);
                i++;
            }
            return num;
        }

这在浏览器上是有效的,并且产生相同的结果。

xmq68pz9

xmq68pz92#

@moudi的回答让我走上了正确的轨道,所以他值得接受,但只是为了好玩:
(更新:@adrew-parks建议的更小版本):

const stringAsUInt32BE = x => [...x].reduce((a, v) => (a <<= 8) + v.charCodeAt(), 0)

console.log(stringAsUInt32BE('\x00\x00\x16%'))

原文回答:

const stringAsUInt32BE = (x) => [...x].reduce((acc, value) => { acc <<= 8; return acc + value.charCodeAt(0) }, 0)

console.log(stringAsUInt32BE('\x00\x00\x16%'))
llew8vvj

llew8vvj3#

const s = '\x00\x00\x16%'
const charToHex = c => c.charCodeAt().toString(16)
const n = BigInt('0x'+[...s].map(charToHex).join(''))

console.log(Number(n))

相关问题