代码之家  ›  专栏  ›  技术社区  ›  Dhiraj

Javascript-解析十六进制值

  •  1
  • Dhiraj  · 技术社区  · 7 年前

    我试图解析一个十六进制值来解码一张卡

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

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

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

    收到的值为 1.9703930145800871e+31

    当我尝试使用Javascript中的按位运算符对其进行解码时

        var cardNumber = ((parseData & 0xFFFFF) >> 1).toString();
    

    我收到了 0 价值

    我做错了什么,我怎么能解析这么大的整数的值呢?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Dawid Loranc    7 年前

    有两种方法:

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

    因此,您只需从数字的末尾执行一个子字符串,然后执行其余操作:

    var data = 'b543e1987aac6762f22ccaadd';
    var substring = data.substr(-5);
    
    var parseData = parseInt(substring, 16);
    var cardNumber = ((parseData & 0xFFFFF) >> 1).toString();
    
    document.write(cardNumber);

    第二种方法是使用任何大整数库,如果您对大整数进行任何操作,我建议您使用该库。

        2
  •  0
  •   Moyom    7 年前

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

    我推荐 BigInteger ,因为您只处理整数,并且它支持按位操作,但是您也可以检查 this 回答更多选项。

    推荐文章