Joe*_*oup 5 java unsigned integer
在java中,如何将整数写入文件,使它们是无符号的8位整数(在0到255范围内)?这些数字是int类型并且在0-255之内是否足够,或者我是否需要先将它们转换为其他类型?我认为这是一回事吗?但是我不确定当它们被放入文件时是否会发生一些有趣的事情......
Qua*_*nic 10
有符号与无符号只是解释位模式的问题,而不是位模式本身.
所以,如果只要你的整数的范围是0到255,你可以果酱他们成字节写入字节的文件.
但是,由于Java将字节位模式解释为已签名,因此在重新读取时必须小心.
例如,假设你有整数253.这是(完全32位形式):
00000000000000000000000011111101
Run Code Online (Sandbox Code Playgroud)
如果你这样做:
int i = 253;
byte b = (byte) i;
Run Code Online (Sandbox Code Playgroud)
然后b将包含位:
11111101
Run Code Online (Sandbox Code Playgroud)
如果你要求Java使用它,Java会声称这是-3因为当将位解释为signed时,-3表示为模式11111101.因此,如果将该字节写入文件,11111101则会根据需要写出这些位.
同样,当您在读取文件时将其读回一个字节时,您读入它的字节将填充位模式11111101,Java也将其解释为-3.所以你不能只做:
byte b = readByteFromFile();
int i = b;
Run Code Online (Sandbox Code Playgroud)
因为Java会将b内容解释为-3并给出-3一个表示为32位整数的整数,它将是:
11111111111111111111111111111101
Run Code Online (Sandbox Code Playgroud)
相反,你需要屏蔽掉一些东西,以确保你最终得到的整数是:
00000000000000000000000011111101
Run Code Online (Sandbox Code Playgroud)
所以,
byte b = readByteFromFile();
int i = (0x000000FF) & b;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10705 次 |
| 最近记录: |