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);
第二种方法是使用任何大整数库,如果你对大整数进行任何操作,我推荐给你。
我正在尝试解析十六进制值来解码卡片
我从卡上收到的十六进制数据是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);
第二种方法是使用任何大整数库,如果你对大整数进行任何操作,我推荐给你。