根据位图文件头,求BMP文件大小

根据位图文件头,求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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值