为什么我用readInt()读出来的数据与文件里的不符啊?

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:57:40
文件内容如下:
11 13 23 27 34 54 57 65 69 78
我用随机读取readInt()读出来的第一个数据是825303089
语句:
rwf.seek(0);
System.out.print(rwf.readInt());

如果你说的数据文件真的得到825303089,那你的数据文件也不应该是"11 13 23..", 而是"1 113 23 27..."
原因:你说的数据文件其实是文本文件,只不过里面都是数字字符而已。
用 readInt(),是以二进制方式读文件的4个字节,把它当作一个int处理。
所以在读"1 113 23..."时,读入的是"1 11", 即0x31, 0x20, 0x31, 0x31四个字节,组成整型数是0x31312031,即825303089;
如果是读"11 13 23...", 则读入的是"11 1", 即0x31, 0x31, 0x20, 0x31四个字节,组成整型数是0x31203131,即824193329。
下面的程序说明了这一问题。
char txt[] = "11 13 23 27 34 54 57 65 69 78";
printf("%s\n", txt);
printf("%d(0x%08x)\n", *(int *)txt, *(int *)txt);

int n = 825303089;
memcpy(txt, &n, sizeof(int));
printf("%s\n", txt);
printf("%d(0x%08x)\n", *(int *)txt, *(int *)txt);

运行结果是:
11 13 23 27 34 54 57 65 69 78
824193329(0x31203131)
1 113 23 27 34 54 57 65 69 78
825303089(0x31312031)

如果要用readInt()读入整型数据11,13,23,27..., 文件不应该是文本文件,而应该是二进制数据文件,用十六进制表示,