首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:需要帮助理解变量赋值背后的&0x04

Android:需要帮助理解变量赋值背后的&0x04
EN

Stack Overflow用户
提问于 2011-08-09 21:51:31
回答 3查看 376关注 0票数 0

想知道是否有人会有一些洞察力,或者向我介绍解释以下代码行的适当文档:

代码语言:javascript
复制
byte flag = (byte) (flagOfCardData&0x04);

我不知道为什么&0x04会在flagOfCardData之后出现。我知道这与十六进制有关,但仅此而已。在这里,它是代码行,因为它位于函数中。

代码语言:javascript
复制
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,我确实给他们发了同样的问题,但是谁知道他们是否会回复,什么时候会回复。我将在这里张贴他们的答案,以及其他可能遇到同样问题的人。

如果你需要更多的信息,请告诉我。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-09 21:56:58

您的flagOfCardData是一个8位整数,但是每个位都被指定了一些独立的含义。在您的情况下,您只想知道它的第二位。要做到这一点,您可以按位执行--使用00000100b执行,即4:

代码语言:javascript
复制
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 ),则为10 otherwise (1 & 0 = 0)。因此,flagOfCardData & 0x04相应地是eiter 4或0。

习惯上只对单个位使用十六进制表示法:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-08-09 21:59:13

请将此理解为:

代码语言:javascript
复制
byte flag = (byte) (flagOfCardData & 0x04);

&是“按位和”运算符。0x04是二进制00000100的十六进制。使用该位模式将选择flagOfCardData变量中的一个位,我假设它是一组标志。

如果设置了标志,那么flag == 0x04。如果未设置,则为flag == 0x00。下面的if语句检查了这两种可能性。从注释的外观来看,这是“加密数据”标志。

票数 1
EN

Stack Overflow用户

发布于 2011-08-09 22:01:07

代码测试是否设置了flagOfCardData的第2位。值0x4是二进制00000100。'&‘操作符按位执行,这意味着将两个操作数字节的每一个位放在一起,以产生一个字节大小的结果(而不是逻辑和)。

根据注释,如果标记不是零,则函数应该解密数据,即设置了位2。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7003448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档