java:将整数作为无符号 8 位整数写入文件

标签 java integer unsigned

在 java 中,如何将整数写入文件,使它们成为无符号的 8 位整数(在 0 到 255 范围内)?数字是 int 类型且在 0-255 之间就足够了吗,还是我需要先将它们转换为其他类型?我认为这只是同一件事?但我不确定将它们放入文件时是否会发生一些有趣的事情......

最佳答案

有符号与无符号只是如何解释位模式的问题,而不是位模式本身。

因此,只要您的整数在 0255 范围内,您就可以将它们压缩成字节并将字节写入文件。

但是,由于 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/

相关文章:

java - 如何在liferay 6.2中显示二级drop dwon菜单?

c - 内存中数据的有符号和无符号表示?

c++ - operator << 如果结果是 unsigned int 或 unsigned short 则解释算术运算

java - 如何为 GWT DecoratedTabPanel 实现复合 View /演示器?

java - JDesktopPane 放置

java - hibernate - 内存不足插入大 Blob

python - 当 python 添加小整数时,幕后会发生什么?

python - Qt 相当于 Python 的 range() 函数,返回 QList<int> 吗?

c++ - 字符串与整数的连接

c++ - int 值通常什么时候转换为 unsigned?