如何修改这个小端方法,使其不返回负整数?

时间:2015-01-18 08:37:55

标签: java

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时,小端整数输出将不是负整数?我不明白为什么它会继续返回两个补码整数。

3 个答案:

答案 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)

我认为这里的答案可能实际上是你不应该注意答案是否定的:只是将其视为无符号,并且输出的符号性不重要。你不能消除负面输出的可能性,但我认为你错了很重要。