1

抱歉这个愚蠢的问题,但我在通过网络发送 -1 时遇到了一些麻烦。

如果 1 是....

00000000 00000000 00000000 00000001

.....应该-1不是......

11111111 11111111 11111111 11111111

.....我正在发送(255 255 255 255),但得到十进制值......

-1010842689

....在另一边。我是否错误地假设相同的 8 位规则适用于 32 位或其他东西?

谢谢你的帮助。

编辑:

事实证明,输出被格式化为 UTF-8,它不允许值 255 作为第一个字节,所以输出其他内容(错误代码?)。

4

2 回答 2

1

-1 在 2s 补码中表示为全 1 位。

我在 Java 中验证了这一点。Java 使用 32 位 2s 补码整数。

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.toHexString(-1));
        System.out.println(Integer.toHexString(-1010842689));
    }
}

输出:

ffffffff
c3bfc3bf
于 2012-03-16T15:13:57.423 回答
0

您得到的十进制值等于 0xFFFFFFFFC3BFC3BF,一个 64 位值。如果您只发送 32 位并且您正在读取 sizeof(int) 字节,其中 sizeof(int) 实际上是 8 而不是 4,您可能会看到与此类似的内容。

于 2012-03-16T15:12:42.337 回答