在C ++中存储到文件时,为什么short int变成4bytes?

问题描述

我正在尝试使用C ++创建BITMAP图像。

代码

#include <stdio.h>
#include <fstream>
using namespace std;

struct BMPHeader{
    short int file_type = 0x4d42;
    int file_size = 0;
};

int main(){
    struct BMPHeader img;
    printf("%ld",sizeof(img.file_type));
    ofstream f1;
    f1.open("output.bmp",ios::out);
    f1.write(reinterpret_cast <char *> (&img),sizeof(img));
    f1.close();
    return 0;
}

现在,如果我使用xxd查看得到的output.bmp文件

$ xxd output.bmp 
00000000: 424d 0000 0000 0000                      BM......

此处,变量“ file_type”在存储时变为4个字节。但是sizeof()输出为2个字节。

现在,如果未声明变量“ file_size”,则将其存储为2个字节(这是我想要的)。

struct BMPHeader{
    short int file_type = 0x4d42;
    //int file_size = 0;
};
xxd output.bmp 
00000000: 424d                                     BM

我在做什么错了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)