c - 用C读写二进制文件?

标签 c linux file-io binary

谁有可以写入二进制文件的代码示例。还有可以读取二进制文件并输出到屏幕的代码。查看示例我可以写入文件,但是当我尝试从文件中读取时,它没有正确输出。

最佳答案

二进制文件的读写与任何其他文件几乎相同,唯一的区别是打开方式:

unsigned char buffer[10];
FILE *ptr;

ptr = fopen("test.bin","rb");  // r for read, b for binary

fread(buffer,sizeof(buffer),1,ptr); // read 10 bytes to our buffer

你说你可以阅读它,但它没有正确输出......请记住,当你“输出”这个数据时,你不是在阅读 ASCII,所以它不像在屏幕上打印一个字符串:

for(int i = 0; i<10; i++)
    printf("%u ", buffer[i]); // prints a series of bytes

写入文件几乎相同,只是您使用的是 fwrite()而不是 fread() :

FILE *write_ptr;

write_ptr = fopen("test.bin","wb");  // w for write, b for binary

fwrite(buffer,sizeof(buffer),1,write_ptr); // write 10 bytes from our buffer

既然我们谈论的是 Linux.. 有一种简单的方法可以进行健全性检查。在你的系统上安装 hexdump(如果它还没有的话)并转储你的文件:

mike@mike-VirtualBox:~/C$ hexdump test.bin
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0001 003e 0001 0000 0000 0000 0000 0000
...

现在将其与您的输出进行比较:

mike@mike-VirtualBox:~/C$ ./a.out 
127 69 76 70 2 1 1 0 0 0

hmm,也许将 printf 更改为 %x 以使其更清晰:

mike@mike-VirtualBox:~/C$ ./a.out 
7F 45 4C 46 2 1 1 0 0 0

嘿,看!数据现在匹配*。太棒了,我们必须正确读取二进制文件!

*注意字节只是在输出上交换,但数据是正确的,你可以针对这种事情进行调整

关于c - 用C读写二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598572/

相关文章:

C - 激活记录中变量的地址

c - 如何循环移动n个位置的数组

linux - 识别从串行终端读取时\r 伪影的原因?

linux - 如何使用make和编译为C99?

c++ - 在其他文件中复制同时包含字符串和整数的文件,但顺序相反

c++ - a+(-a) 操作期间溢出

android - NDK冲突c/c++

linux - Docker devicemapper存储空间

java - 我如何每隔 [在此处插入间隔] 写入文件?

powershell - 在 PowerShell 中将输出写入文本文件