我不知道这是不是一个错误,或者我在这里缺少一些东西。我正在尝试获取文件的确切字节,以便我能够处理一些文件。
所以我有一个byte [1024]数组来获取它的前1024个字节,一个char [1024]数组,我在每个字节上做一个Integer.toBinaryString来查看它的值
但在某些位置,而不是8位字节,有像索引[20] = 11111111111111111111111111111111这样的值 指数[21] = 11111111111111111111111111111110
一个字节怎么能是32位?
在这种情况下它应该是一个UTF-16 BOM并且根据我的测试它应该是255 254,所以只有每个索引的最后8个应该在那里
提前感谢您的帮助
答案 0 :(得分:2)
字节和整数都用Java签名。
负值存储为两个补码。
因此-1字节表示为'1111 1111'。这被转换为-1 int,表示为'1111 1111 1111 1111 1111 1111 1111 1111',这就是你所看到的。
如果您有一个字节b
并希望看到其精确的逐位表示,则需要执行((int) b) & 0xFF
。
这会将您的字节转换为int,并将该新int的第一个字节“上方”的所有位重置为零。
答案 1 :(得分:1)
您正在调用Integer.toBinaryString()
,其中包含int
个参数。
您传入的byte
会自动转换为int
。 int
有4个字节,因此您可以获得32位。