想知道是否有人有一些见解或向我指出解释以下代码行的正确文档:
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 我确实向他们发送了同样的问题,但谁知道他们是否以及何时会回复。我也会在这里发布他们的答案,供其他可能遇到同样问题的人使用。
如果您需要更多信息,请告诉我。
谢谢。
最佳答案
您的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
现在,如果设置了第二位 (1 & 1 = 1
),则 X
为 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
关于java - Android:需要帮助理解变量赋值背后的 &0x04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003448/