typedef struct tagFileheader
{
unsigned short Type; // 00h File Type Identifier to check if the file is bmp or not
unsigned int FileSize; // 02h Size of bmp file No.of bytes of the bitmap file
unsigned int PxOffset; // 0Ah Offset to bitmap pixel data
}Fileheader;
Fileheader filehdr;
Fileheader *pFileheader = &filehdr;
unsigned short Get16U(unsigned int *x)
{
unsigned short temp;
temp = *x & (0xFFFF);
return temp;
}
unsigned int Get32U(unsigned int *x)
{
unsigned int temp;
temp = *x ;
return temp;
}
int Get32(unsigned int *x)
{
int temp;
temp = *x ;
return temp;
}
void main()
{
unsigned int headersize,i ;
bAddress = fopen("D:/Tapan/Projects/Jacquard/BMP/03Body.bmp","rb"); // open the file and send the start address of its memory location
pFileheader->Type = Get16U(bAddress); // save the first two bytes of bmp file data
(char*)bAddress++;
(char*)bAddress++; // increment the address by 2 bytes to reach address of "Filesize" parameter
if(pFileheader->Type == bmpSIGNATURE) // read further bytes of the FILE header and INFO header only if the file is a bitmap
{
pFileheader->FileSize = Get32U(bAddress); // save the filesize
bAddress = bAddress + 2; // increment the address by 8 bytes to reach address of "offset" parameter
pFileheader->PxOffset = Get32U(bAddress); // save the offset
bAddress++; // increment the address by 4 bytes to reach address of "info header size" parameter
}
}
这是我的代码。 我在这段代码中的主要意图是读取bmp文件头。我想声明一个指针,它将保存将由fopen()创建的缓冲区的起始地址。并使用该起始地址,我将从缓冲区中读取数据。 我在ARM控制器中使用此代码。 这不是完整的代码。
在main之前我已将bAddress全局声明为 -
unsigned int *bAddress
当我编译代码时,我得到以下错误 - 类型为" int"无法分配给" unsigned int *' 现在的问题是,我的指针声明是否正确? 我见过FILE被用来为fopen()声明一个指针变量 我应该如何在这里使用FILE。如何声明FILE的结构
答案 0 :(得分:3)
使用
(char*)bAddress++;
(char*)bAddress++;
不会将FILE*
移动两个字符。实际上,它会使bAddress
无法使用。你需要的是:
fgetc(bAddress);
fgetc(bAddress);
然而,我有一种感觉,改变这两条线不会解决你的问题。您显然不了解如何使用FILE*
执行I / O.在真实程序中使用文件I / O之前,您需要花些时间阅读文件I / O如何使用FILE*
。
您可以从http://www.tutorialspoint.com/cprogramming/c_file_io.htm的教程开始。
答案 1 :(得分:0)
我认为在文本模式下阅读bmp文件并不是一个好主意。使用二进制模式"rb"
(不是"r"
)和fread ()
函数,不要直接更改指向文件结构的指针,也不要更改FILE字段中的数据。