解码RFID数据十六进制数学问题C ++

时间:2015-02-03 00:22:59

标签: c++ binary hex decimal bits

我目前无法从RFID卡中获取所需的结果数据。我把它解码了,但现在我需要做更多的事情,以便从卡的背面获得最终的卡号。

隐秘值是 E ******** B 0 E 。 解密它变成 0000003048D1263B

现在我还有3个步骤可以获取我想要的卡号。

  

步骤1)屏蔽掉低20位(应该给我0x1263B)我不知道如何使用C ++来做这件事。

     

步骤2)除以2以去除低校验位(应该是0x931d)。而且,我不确定如何在C ++中这样做。

     

步骤3)将十六进制值转换为十进制值(这将等于我想要的卡号)。这应该可以在这一点上使用C ++轻松完成 - 虽然很难确认,因为我在第1步。)

const char* original = "0x931d";
unsigned long n = std::strtoul(original, nullptr, 16);

所有这一切对我来说都像RegEX对大多数人所做的那样 - 复杂而不理解为什么它会做它所做的但却提供正确的输出。

所有帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

  
    

步骤1)屏蔽掉低20位(应该给我0x1263B)我不知道如何使用C ++来做这件事。

  

首先,为要保存或屏蔽的每个位创建一个包含1&#s的二进制值。 在你的情况下,它将是0b111 1111 1111 1111 1111,或0xFFFFF 使用&运算符使用掩码表示您的值。

  result = value & 0xFFFFF;  
  

步骤2)除以2以去除低校验位(应该是0x931d)。而且,我不确定如何在C ++中这样做。

除以2与将值右移1位相同。

result = result >> 1;  
  

步骤3)将十六进制值转换为十进制值(这将等于我想要的卡号)。这个应该可以在这一点上使用C ++轻松完成 - 虽然很难确认,因为我在第1步)。

这有必要吗?转换仅适用于用户。

  cout << result;