根据位图文件头,求BMP文件大小
题目描述
根据位图文件头,求文件大小。
输入
输入占一行,以十六进制的形式输入BMP文件的位图文件头。
输出
输出二行:
第1行是用十六进制表示的BMP文件大小 ,加上前导0x(x是小写);
第2行是用十进制表示的BMP文件大小。
样例输入 Copy
42 4D 36 C0 00 00 00 00 00 00 36 00 00 00
样例输出 Copy
0x0000C036
49206
解题前我们可以了解一下bmp文件的相关内容:
bmp文件格式详解
通过比对样例输入输出我们可以发现它只与3~6组字符有关,且为逆序输出,输出第二行为第一行的十进制转化。
代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
char str[41],a[8]={0};
int i;
for(i=0;i<41;i++)
scanf("%c",&str[i]);//输入数据
printf("0x");
int sum=0,j=7;
for(i=15;i>=6;i=i-3){
if(str[i]!=' ')
printf("%c%c",str[i],str[i+1]);//一组一组字符逆向输出
if(str[i]>='A'&&str[i]<='F')
str[i]=str[i]-'A'+10;//十六进制字母转换
else
str[i]=str[i]-'0';
if(str[i+1]>='A'&&str[i+1]<='F')
str[i+1]=str[i+1]-'A'+10;
else
str[i+1]=str[i+1]-'0';
sum=sum+(str[i])*pow(16,j)+(str[i+1])*pow(16,j-1);
j=j-2;
}
printf("\n");
printf("%d",sum);
}