用c语言编写和读取二进制文件
我试图将一个整数写入一个二进制文件,然后读取相同的内容。但是,我的程序读取的数字与编写的不同。我做错了什么用c语言编写和读取二进制文件,c,binary,fwrite,fread,file-pointer,C,Binary,Fwrite,Fread,File Pointer,我试图将一个整数写入一个二进制文件,然后读取相同的内容。但是,我的程序读取的数字与编写的不同。我做错了什么 unsigned short int numToWrite = 2079; // Write to output FILE *write_ptr; write_ptr = fopen("test.bin","wb"); // w for write, b for binary printf("numToWr
unsigned short int numToWrite = 2079;
// Write to output
FILE *write_ptr;
write_ptr = fopen("test.bin","wb"); // w for write, b for binary
printf("numToWrite: %d\n", *(&numToWrite));
fwrite(&numToWrite, sizeof(unsigned short int), 1, write_ptr); // write 10 bytes from our buffer
fclose(write_ptr);
// Read the binary file
FILE *read_ptr = fopen(filename, "rb");
if (!read_ptr) {
perror("fopen");
exit(EXIT_FAILURE);
}
unsigned short int* numToRead = malloc(sizeof (unsigned short int));
fread(numToRead, sizeof(unsigned short int), 1, read_ptr);
printf("numToRead: %d\n", *numToRead);
free(numToRead);
fclose(read_ptr);
输出如下:
numToWrite: 2079
numToRead: 26964
长度修改器
h-以下整数转换对应于短参数或无符号短参数
转换说明符
d、 i-int参数转换为有符号十进制表示法
格式字符串的格式
每个转换规范都由字符%引入,并以转换说明符结尾。中间可能有(按此顺序)零个或多个标志、可选的最小字段宽度、可选的精度和可选的长度修饰符
您使用的是unsigned short int
,但这不是您要告诉printf
的。
因此,您的期望没有实现。正在发生的一些事情: “printf”没有任何二进制格式说明符,因此必须手动执行
你需要深入了解数据类型及其范围,所以我建议使用这个源:它表示C++,这是无关的,因为它给了你一个好的范围的概念。 我知道这并不是你的全部代码,但请理解我所看到的一些东西并没有定义,比如“文件名”
如果有人提到atoi()和itoa(),请记住这一点,理论上您可以使用atoi()和itoa(),但是请注意,atoi()和itoa()是一个非标准函数,一些编译器支持它最后,为什么要使用“unsigned short int”、“*(&numToWrite)”,以及您可以向我们展示的程序中是否还有其他内容?这不会编译,因为
filename
未定义。还有几个未声明的函数。请提供一个完整的例子。请提供一个。如果您使用“numToWrite”,那么当您使用“numToRead”时,为了清晰起见,您应该再次使用一个仅为一个短整型和一个非短整型*。这样,您也可以避免使用malloc