问题描述
我很想知道为什么,当我比较一个 byte
数组和一个值...
I'm curious to know why, when I compare a byte
array with a value...
boolean match = ((data[0] & 0xFF) == 0xFE);
...返回 true
..
boolean match = (data[0] == 0xFE);
...不是? 数据
是一个 byte
数组,包含
...does not? data
is a byte
array with
data[0] = (byte) 0xFE;
推荐答案
boolean match = ((data[0] & 0xFF) == 0xFE);
比较整数,因为0xFF是整数,此表达式会扩展您的字节 data [0]
到一个int,并比较括号内的内容到第二个int 0xFE
( 254
)。因为你说 data [0]
是(byte)0xFE
,它将首先被缩放为整数 0xFE
并与整数 0xFE
进行比较,因此这是有效的。
compares integers as 0xFF is an integer, this expression will scale up your byte data[0]
to an int and compare what's inside the parenthesis to a second int 0xFE
(254
). As you say data[0]
is (byte)0xFE
, it will first be scaled to the integer 0xFE
and compared to the integer 0xFE
, so this works.
boolean match (data[0] == 0xFE);
将一个字节与int 0xFE
254
compares a byte to the int 0xFE
: 254
data[0] = (byte) 0xFE;
是一个字节(因此),其值为 -2
。
is a byte (so it's signed) and its value is -2
.
-2
不等于 254
,因此这就是为什么必须将数据[0]字节或者在比较整数 0xFE
之前将其缩放到整数。
-2
is not equal to 254
, so that's why you must compare data[0] as a byte or as scale it up to an integer before comparing it the integer 0xFE
.
更简单的比较可以是
boolean match = (data[0] == (byte)0xFE);
这篇关于比较字节值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!