Javascript - 解析十六进制值

Javascript - parsing a hex value

我正在尝试解析十六进制值来解码卡片

我从卡上收到的十六进制数据是f8b2d501f8ff12e0056281ed55

首先,我使用 parseInt() 将其转换为整数

    var parseData = parseInt('f8b2d501f8ff12e0056281ed55', 16);

收到的值为1.9703930145800871e+31

当我尝试使用 Javascript

中的按位运算符对其进行解码时
    var cardNumber = ((parseData & 0xFFFFF) >> 1).toString();

我收到了一个 0 值。

我哪里做错了,如何解析这么大的整数的值?

由于数字整数太大,您应该为 js 使用任何 bigNum 库。

我推荐 BigInteger, since you are working only with integers and it supports bitwise operations, however you can also check this 答案以获得更多选项。

有两种方法可以做到:

首先,请注意代码中的 & 0xFFFFF 操作等同于获取字符串的子字符串(最后 5 个字符)。

所以,您可以只从号码的末尾做一个子串,然后再做剩下的:

var data = 'b543e1987aac6762f22ccaadd';
var substring = data.substr(-5);

var parseData = parseInt(substring, 16);
var cardNumber = ((parseData & 0xFFFFF) >> 1).toString();

document.write(cardNumber);

第二种方法是使用任何大整数库,如果你对大整数进行任何操作,我推荐给你。