想知道是否有人会有一些洞察力,或者向我介绍解释以下代码行的适当文档:
byte flag = (byte) (flagOfCardData&0x04);我不知道为什么&0x04会在flagOfCardData之后出现。我知道这与十六进制有关,但仅此而已。在这里,它是代码行,因为它位于函数中。
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的一部分,它是通过音频端口连接到Android驱动设备的磁卡读取器的一部分。这种产品被称为unimag。这是一个网站:http://www.idtechproducts.com/products/mobile-readers/126.html,我确实给他们发了同样的问题,但是谁知道他们是否会回复,什么时候会回复。我将在这里张贴他们的答案,以及其他可能遇到同样问题的人。
如果你需要更多的信息,请告诉我。
谢谢。
发布于 2011-08-09 21:56:58
您的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,0 otherwise (1 & 0 = 0)。因此,flagOfCardData & 0x04相应地是eiter 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发布于 2011-08-09 21:59:13
请将此理解为:
byte flag = (byte) (flagOfCardData & 0x04);&是“按位和”运算符。0x04是二进制00000100的十六进制。使用该位模式将选择flagOfCardData变量中的一个位,我假设它是一组标志。
如果设置了标志,那么flag == 0x04。如果未设置,则为flag == 0x00。下面的if语句检查了这两种可能性。从注释的外观来看,这是“加密数据”标志。
发布于 2011-08-09 22:01:07
代码测试是否设置了flagOfCardData的第2位。值0x4是二进制00000100。'&‘操作符按位执行,这意味着将两个操作数字节的每一个位放在一起,以产生一个字节大小的结果(而不是逻辑和)。
根据注释,如果标记不是零,则函数应该解密数据,即设置了位2。
https://stackoverflow.com/questions/7003448
复制相似问题