我正在尝试逐字节打印文件的内容。但是,我确实得到了编译器错误" unary *(have int)
的无效类型参数我的代码是:
void print_the_file ()
{
void *file_hndl;
UINT32 file_size = 2048;
UINT8 *hndl;
file_hndl = fopen("my_bin_file.bin", "r") ;
if ( file_hndl == NULL )
{
printf("file open failed");
}
hndl = (UINT8*)file_hndl;
/* print the contents */
for ( UINT32 i = 0; i< 2048; i++ )
{
printf ("%02x", *hndl[i] );
}
}
请告诉我出错的地方以及打印文件内容的正确方法。
答案 0 :(得分:0)
fopen
会返回FILE *
,因此您的file_hndl
应属于该类型。当您从fopen
检查返回值以打印出错误消息时,您会忽略它并继续尝试从文件中读取。
你实际上并没有从文件中读取内容 - 你需要调用fgetc
之类的其他功能来执行此操作。但是,当您尝试读取二进制文件时,使用fopen
/ fgetc
可能并不是您想要的。为此,您要使用open
和read
。
以下代码执行您实际尝试的操作。
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
void print_the_file(void)
{
int file_desc;
char a_byte;
size_t err;
file_desc=open("my_bin_file.bin",O_RDONLY,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if(file_desc==-1)
{
printf("file open failed\n");
return;
}
do
{
err=read(file_desc,&a_byte,1);
if(err>0)
{
printf("%02x",a_byte);
}
}
while(err>0);
}
答案 1 :(得分:0)
for ( UINT32 i = 0; i< 2048; i++ )
{
// printf ("%02x", *hndl[i] );
printf ("%02x", fgetc(hndl) );
// remove * if you are using [] or write like this *(hndl+i)
}
确保使用C99或更高标准进行编译。为此
for ( UINT32 i = 0; i< 2048; i++ )
答案 2 :(得分:0)
尝试这样的事情:
fopen
请注意,"rb"
的文件模式为df1.CODE = np.where((df1.CODE == 11.0) | (df1.CODE == 44.0), 1, np.where((df1.CODE == 33.0), 0, 5))
ID_USER CODE
0 433805 1
24 5448 1
48 3434 1
72 34434 1
96 3202 0
120 23766 0
153 39457 1
168 4113 0
172 3435 5
374 34093 1
,以打开文件以读取为二进制文件。
此外,例程会逐个字符处理整个文件,直到发生EOF或错误。