想知道是否有人可能有一些见解或指出我正确的文档解释以下代码行:
byte flag = (byte) (flagOfCardData&0x04);
我没有任何关于为什么在flagOfCardData之后有& 0x04 的线索。我知道它与十六进制有关,但就是这样。这是它在函数中的代码行。
public void onReceiveMsgCardData(byte flagOfCardData,byte[] cardData) {
// TODO Auto-generated method stub
byte flag = (byte) (flagOfCardData&0x04);
if(flag==0x00)
_strMSRData = new String (cardData);
if(flag==0x04)
{
//You need to dencrypt the data here first.
_strMSRData = new String (cardData);
}
_MSRData = null;
_MSRData = new byte[cardData.length];
System.arraycopy(cardData, 0, _MSRData, 0, cardData.length);
_isCardData = true;
handler.post(doHideTopDlg);
handler.post(doHideSwipeTopDlg);
handler.post(doUpdateTVS);
}
我会查找为什么这样做,但我甚至无法弄清楚正确的搜索关键字DOH!感谢您的帮助。
这是针对使用eclipse和java的Android sdk。此外,该代码是另一个sdk的一部分,该sdk是通过音频端口连接到Android供电设备的磁卡读卡器的一部分。该产品被称为unimag pro。这是网站:http://www.idtechproducts.com/products/mobile-readers/126.html 我确实向他们发送了同样的问题,但谁知道他们是否以及何时会回应。我会在这里发布他们的答案以及可能遇到同样问题的其他人。
如果您需要更多信息,请与我们联系。
感谢。
答案 0 :(得分:1)
您的flagOfCardData
是一个8位整数,但每个位都分配了一些独立的含义。在您的情况下,仅想知道其第二个位。为此,您执行按位 - 并使用00000100b,即4:
Mystery byte: ? ? ? ? ? ? ? ?
We want bit 2: 0 0 0 0 0 1 0 0
-----------------< bitwise AND
Result 0 0 0 0 0 X 0 0
如果第二位设置为X
,则1
为1 & 1 = 1
,否则为0
(1 & 0 = 0
)。因此flagOfCardData & 0x04
相应地为4或0。
习惯上只对每个位使用十六进制表示法:
Bit 0: 0x01 Bit 4: 0x10
Bit 1: 0x02 Bit 5: 0x20
Bit 2: 0x04 Bit 6: 0x40
Bit 3: 0x08 Bit 7: 0x80
答案 1 :(得分:1)
请阅读:
byte flag = (byte) (flagOfCardData & 0x04);
&
是“按位和”运算符。 0x04是二进制00000100的十六进制。并且该位模式将选出flagOfCardData
变量的一个位,我假设它是一组标志。
如果设置了标志,则flag == 0x04
。如果未设置,则flag == 0x00
。在下面的if
语句中检查了这两种可能性。从评论的外观来看,这是“加密数据”标志。
答案 2 :(得分:1)
代码测试是否设置了flagOfCardData的第2位。值0x4是二进制00000100。'&amp;'运算符执行按位AND,这意味着将两个操作数字节的每个位进行AND运算,以产生字节大小的结果(与逻辑AND相反)。
根据评论,如果flag不为零,则该函数应该解密数据,即设置了第2位。