Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:需要帮助理解&;变量赋值后的0x04_Java_Android_Hex - Fatal编程技术网

Java 安卓:需要帮助理解&;变量赋值后的0x04

Java 安卓:需要帮助理解&;变量赋值后的0x04,java,android,hex,Java,Android,Hex,想知道是否有人可能有一些见解或向我指出解释以下代码行的适当文档: byte flag = (byte) (flagOfCardData&0x04); 我不知道为什么在CardData标记之后会出现&0x04。我知道这和十六进制有关,但就是这样。这里它是函数中的代码行 public void onReceiveMsgCardData(byte flagOfCardData,byte[] cardData) { // TODO Auto-generated method s

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

byte flag = (byte) (flagOfCardData&0x04);
我不知道为什么在CardData标记之后会出现&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。以下是网站: 我确实向他们提出了同样的问题,但谁知道他们是否会以及何时会作出回应。我会把他们的答案贴在这里,也会贴在其他任何可能遇到同样问题的人身上

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


谢谢。

您的
carddata标记是一个8位整数,但每个位都被赋予了一些独立的含义。在你的例子中,你只想知道它的第二位。要执行此操作,请使用00000 100B执行按位and,即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

您的
flagOfCardData
是一个8位整数,但每个位都被赋予了一些独立的含义。在你的例子中,你只想知道它的第二位。要执行此操作,请使用00000 100B执行按位and,即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
将此理解为:

byte flag = (byte) (flagOfCardData & 0x04);
&
是“按位and”运算符。0x04是二进制00000100的十六进制。输入该位模式将挑选出
flagOfCardData
变量的单个位,我假设它是一组标志

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

将其理解为:

byte flag = (byte) (flagOfCardData & 0x04);
&
是“按位and”运算符。0x04是二进制00000100的十六进制。输入该位模式将挑选出
flagOfCardData
变量的单个位,我假设它是一组标志


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

代码测试是否设置了flagOfCardData的第2位。值0x4是二进制00000100。“&”运算符执行按位AND,这意味着将两个操作数字节的每一位相加,以产生字节大小的结果(与逻辑AND相反)


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

代码测试是否设置了flagOfCardData的位2。值0x4是二进制00000100。“&”运算符执行按位AND,这意味着将两个操作数字节的每一位相加,以产生字节大小的结果(与逻辑AND相反)


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

Ok,sweet!谢谢大家的精彩解释。我以前从来没有处理过按位和按位的问题。他们会这样写:“flagOfCardData&0x04”并加上空格以提高可读性吗?好的,太好了!谢谢大家的精彩解释。我以前从来没有处理过按位和按位的问题。他们是否可以这样写:“flagOfCardData&0x04”加上空格以使其更具可读性?