在 C 中打开二进制文件
Opening binary files in C
我正在尝试打开二进制文件并读取 class 作业的内容。即使经过研究,我在尝试打开和打印二进制文件的内容时也无法显示任何内容。我什至不确定我应该得到什么,如何检查它是否正确,但我知道没有什么(这是我目前得到的)是不好的。这是我在这个网站上搜索得到的代码
#include<stdio.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
fread(buf, 1, 8, ptr_myfile);
printf("First Character: %c", buf[0]);
fclose(ptr_myfile);
return 0;
}
打印时,我得到 "First Character: ",没有打印任何其他内容。也许它不能在终端正常打印?我不确定,如果有任何帮助,我们将不胜感激,谢谢
首先,您需要检查缓冲区中有多少数据。 fread
returns 长度;如果为零,则访问 buf[0]
不合法。
并非所有字符都可打印 如果打印 c
的字符代码而不是 c
本身,您可以看到获得的数据。为此使用 %d
。
size_t len = fread(buf, 1, 8, ptr_myfile);
if (len != 0) {
printf("First Character: '%c', code %d", buf[0], buf[0]);
} else {
printf("The file has no data\n");
}
如果它是一个二进制文件,它的内容很可能不会像文本一样打印得特别好(这就是使二进制文件成为二进制文件的原因)。不要打印为字符,而是尝试打印为十六进制数字:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
size_t rb;
do {
rb = fread(buf, 1, 8, ptr_myfile);
if( rb ) {
size_t i;
for(i = 0; i < rb; ++i) {
printf("%02x", (unsigned int)buf[i]);
}
printf("\n");
}
} while( rb );
fclose(ptr_myfile);
return 0;
}
我正在尝试打开二进制文件并读取 class 作业的内容。即使经过研究,我在尝试打开和打印二进制文件的内容时也无法显示任何内容。我什至不确定我应该得到什么,如何检查它是否正确,但我知道没有什么(这是我目前得到的)是不好的。这是我在这个网站上搜索得到的代码
#include<stdio.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
fread(buf, 1, 8, ptr_myfile);
printf("First Character: %c", buf[0]);
fclose(ptr_myfile);
return 0;
}
打印时,我得到 "First Character: ",没有打印任何其他内容。也许它不能在终端正常打印?我不确定,如果有任何帮助,我们将不胜感激,谢谢
首先,您需要检查缓冲区中有多少数据。 fread
returns 长度;如果为零,则访问 buf[0]
不合法。
并非所有字符都可打印 如果打印 c
的字符代码而不是 c
本身,您可以看到获得的数据。为此使用 %d
。
size_t len = fread(buf, 1, 8, ptr_myfile);
if (len != 0) {
printf("First Character: '%c', code %d", buf[0], buf[0]);
} else {
printf("The file has no data\n");
}
如果它是一个二进制文件,它的内容很可能不会像文本一样打印得特别好(这就是使二进制文件成为二进制文件的原因)。不要打印为字符,而是尝试打印为十六进制数字:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
size_t rb;
do {
rb = fread(buf, 1, 8, ptr_myfile);
if( rb ) {
size_t i;
for(i = 0; i < rb; ++i) {
printf("%02x", (unsigned int)buf[i]);
}
printf("\n");
}
} while( rb );
fclose(ptr_myfile);
return 0;
}