很抱歉这个愚蠢的问题,但我在通过网络发送-1时遇到了一些麻烦。
如果1是......
00000000 00000000 00000000 00000001
.....应该-1不是....
11111111 11111111 11111111 11111111
.....我正在发送( 255 255 255 255 ),但获取小数值....
-1010842689
....在另一边。我错误地认为相同的8位规则适用于32位或其他什么?
感谢您的帮助。
修改
事实证明,输出格式为UTF-8,不允许值255为第一个字节,因此输出其他内容(错误代码?)。
答案 0 :(得分: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
答案 1 :(得分:0)
您获得的十进制值等于0xFFFFFFFFC3BFC3BF,即64位值。如果您只发送32位并且您正在读取sizeof(int)字节,其中sizeof(int)实际上是8而不是4,那么您可能会看到与此类似的内容。