繁体   English   中英

如何在 MySQL 数据库中使用 __attribute__((packed)) 存储 c++ 结构?

[英]How to store c++ structures with __attribute__((packed)) in MySQL database?

如何在 MySQL DB 中轻松存储和检索具有属性((packed)) 的任何大小的 c++ 结构?

结构示例:

typedef struct __attribute__((packed))
{
    signed char result;
    unsigned char errorCode;
} Response; 

typedef struct __attribute__((packed))
{
    unsigned char   rackId;
    unsigned char   subRackId;
    unsigned char   cardId;
    unsigned char   cardType;
    unsigned char   cardSubType;
    unsigned char   portId;
    Response        ret; 
}Configure;

由于一切都是char,所以packed属性毫无意义,只需static_assert(sizeof(Configure) == 8); .

您可以将其存储为 CHAR(8)。

如果您有一个具有不同类型的结构,请尝试排列它们,以免发生填充(static_assert 确保大小)。 添加手动填充比使用packed更好。

但是如果你必须使用packed ,你应该使用解压的结构,并且只将数据复制到打包的结构中以写入 mysql,并在从 mysql 读取后复制出打包的结构。 永远不要多次访问打包结构,在许多架构上访问速度会非常慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM