在 java 中,如何将整数写入文件,使它们成为无符号的 8 位整数(在 0 到 255 范围内)?数字是 int 类型且在 0-255 之间就足够了吗,还是我需要先将它们转换为其他类型?我认为这只是同一件事?但我不确定将它们放入文件时是否会发生一些有趣的事情......
最佳答案
有符号与无符号只是如何解释位模式的问题,而不是位模式本身。
因此,只要您的整数在 0
到 255
范围内,您就可以将它们压缩成字节并将字节写入文件。
但是,由于 Java 将字节位模式解释为已签名,因此在读回它们时必须小心。
例如,假设您有整数 253
。这是(完整的 32 位形式):
00000000000000000000000011111101
如果你这样做:
int i = 253;
byte b = (byte) i;
然后 b
将包含位:
11111101
如果您要求 Java 使用它,Java 会声称它是 -3
,因为在将位解释为有符号时,-3
表示为模式 11111101
。因此,如果您将该字节写入文件,位 11111101
将根据需要被写出。
同样,当您在读取文件时将其读回一个字节时,您读入的字节将填充位模式 11111101
,同样,Java 会将其解释为 -3
。所以你不能只做:
byte b = readByteFromFile();
int i = b;
因为 Java 会将 b
的内容解释为 -3
并为您提供表示 -3
的整数作为 32 位整数,这将是:
11111111111111111111111111111101
相反,您需要屏蔽一些东西以确保您最终得到的整数是:
00000000000000000000000011111101
所以,
byte b = readByteFromFile();
int i = (0x000000FF) & b;
关于java:将整数作为无符号 8 位整数写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756264/