我有一个4字节的hexBinary如下:
FFFFFFC4
它应该返回一些大的但是下面的函数只给出-60:
public static int byteArrayToInt(byte[] b)
{
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
(b[1] & 0xFF) << 16 |
(b[0] & 0xFF) << 24;
}
为什么它不起作用?我做错了吗?
答案 0 :(得分:0)
原始类型int
长32位,最有意义的位是符号。值FFFFFFC4
的MSB设置为1
,表示负数。
您可以使用long
代替int
来获得“大事”:
public static long byteArrayToInt(byte[] b)
{
return (((long) b[3]) & 0xFF) |
(((long) b[2]) & 0xFF) << 8 |
(((long) b[1]) & 0xFF) << 16 |
(((long) b[0]) & 0xFF) << 24;
}