想知道是否有人可能有见识或将我指向指向解释以下代码行的适当文档:

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


现在,如果设置了第二个位(X),则11 & 1 = 1,否则设置为01 & 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

10-08 19:49