public static int liEndVal (Byte[] mem) {
return (mem[0] & 0xFF)
| ((mem[1] & 0xFF) << 8)
| ((mem[2] & 0xFF) << 16)
| ((mem[3] & 0xFF) << 24);
}
如何修改此方法,以便当我的输入为例如45 A2 BD 8A时,小端整数输出将不是负整数?我不明白为什么它会继续返回两个补码整数。
答案 0 :(得分:1)
当mem[3]
&gt; 0x7F,返回的int
将为负数,因为int
的最大值为0x7FFFFFFF
。如果您想要正值返回值,请返回long
。
public static long liEndVal (Byte[] mem) {
return (mem[0] & 0xFF)
| ((mem[1] & 0xFF) << 8)
| ((mem[2] & 0xFF) << 16)
| (((long)mem[3] & 0xFF) << 24);
}
答案 1 :(得分:1)
因为在该表示中,(带符号)整数为为负。看起来您需要unsigned int
。
答案 2 :(得分:0)
我认为这里的答案可能实际上是你不应该注意答案是否定的:只是将其视为无符号,并且输出的符号性不重要。你不能消除负面输出的可能性,但我认为你错了很重要。