typedef struct //构建object对应结构体 { uint32 theurid; uint8 theinlinkDir; uint64 theinlinkid; uint8 theoutlinkDir; uint64 theoutlinkid; uint64 theimageid; uint8 thecrosstype; std::string theversion; }Picture; vector<Picture> picture_list; Picture thepicture; BufferUtils::readInt(infile,thepicture.theurid); //4位,ur,我这全是0c1c BufferUtils::readByte(infile,thepicture.theinlinkDir); //1位,驶入,,很小 BufferUtils::readInt64(infile,thepicture.theinlinkid); //8位,21****** BufferUtils::readByte(infile,thepicture.theoutlinkDir); //1位,驶出,,很小 BufferUtils::readInt64(infile,thepicture.theoutlinkid); //8位,21**** BufferUtils::readInt64(infile,thepicture.theimageid); //8位,21**** BufferUtils::readByte(infile,thepicture.thecrosstype); //1位,类型,不大 //BufferUtils内置大概四位int BufferUtils::readString(infile,thepicture.theversion); //4位,string(好像不一定)之前是"Temp9143" BufferUtils::readByte(infile,sheqi_2); //1位,00 picture_list.push_back(thepicture);
时间: 2024-01-24 09:20:40 浏览: 84
这段代码是一个结构体 `Picture` 的定义以及将其添加到一个 `vector` 中的过程。`Picture` 结构体包含了多个成员变量,包括 `theurid`、`theinlinkDir`、`theinlinkid`、`theoutlinkDir`、`theoutlinkid`、`theimageid`、`thecrosstype` 和 `theversion`。在读取二进制文件时,通过 `BufferUtils` 中的函数将文件中的数据逐一读取到 `Picture` 结构体的成员变量中,最后将 `thepicture` 添加到 `picture_list` 中。其中 `readString` 函数读取的是一个字符串,而不是 4 个字节的整型数据。
相关问题
typedef struct { uint32 theurid; uint8 theinlinkDir; uint64 theinlinkid; uint8 theoutlinkDir; uint64 theoutlinkid; uint64 theimageid; uint8 thecrosstype; std::string theversion; }Picture;
这段代码定义了一个名为Picture的结构体,它包含了以下成员变量:
- theurid:一个32位无符号整数,表示图片的唯一ID。
- theinlinkDir:一个8位无符号整数,表示图片的输入链接方向。
- theinlinkid:一个64位无符号整数,表示输入链接的唯一ID。
- theoutlinkDir:一个8位无符号整数,表示图片的输出链接方向。
- theoutlinkid:一个64位无符号整数,表示输出链接的唯一ID。
- theimageid:一个64位无符号整数,表示图片的唯一ID。
- thecrosstype:一个8位无符号整数,表示跨类型。
- theversion:一个字符串,表示版本信息。
typedef struct attribute ((packed)) { uint16_t a; uint32_t b; } //C语言中 这个结构体有警告
这个结构体定义中的 `attribute` 应该是一个宏,用于指定结构体的对齐方式。常见的用法是 `__attribute__((packed))`,表示按最小对齐方式对齐结构体成员,以减小结构体的内存占用。
因为这个宏使用的格式不正确,所以会导致编译器报警告。正确的结构体定义应该是:
```c
#pragma pack(push)
#pragma pack(1)
typedef struct {
uint16_t a;
uint32_t b;
} my_struct;
#pragma pack(pop)
```
这里使用了 `#pragma pack` 指令来指定结构体的对齐方式,避免了使用宏的问题。
阅读全文