c++ - 将字节数组复制到未对齐的结构
问题描述
您好试图理解,为什么将字节数组逐字节复制到未对齐的结构中我会丢失一些数据。也许有办法解决它?
示例代码如下:
typedef struct { //Not aligned data
uint32_t val0;
uint8_t val1;
uint16_t val2;
uint32_t val3;
}TestSt_t;
TestSt_t testSt;
uint8_t testData[16] = {
0x11, 0x22, 0x33, 0x44,
0x55,
0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB
};
int main() {
memcpy((uint8_t*)&testSt, (uint8_t*)&testData[0], sizeof(testSt));
}
解决方案
编译器正在添加一个填充字节
typedef struct { //Not aligned data
uint32_t val0;
uint8_t val1;
uint8_t padding;
uint16_t val2;
uint32_t val3;
}TestSt_t;
0x66
在那个padding
字节中也是如此。
推荐阅读
- node.js - 在'package.json'的'dependencies'字段中添加'npm'有什么意义吗?
- azure - 天蓝色;从 Java 应用程序访问 Key Vault 的权限错误
- macos - Xcode Cocoa:无法读取 CFPrefsPlistSource<0x600002909f10> 中的值
- c++ - 如何只构建一个依赖目标?
- java - Intellij 的远程调试非常频繁地断开连接
- javascript - 仅在预加载器结束后加载 jquery 事件
- chisel - 分别编译模块和链接
- sql-server - 如何在 Python 中检查是否为 Azure SQL Server 启用了审核
- c - 二进制矩阵向量乘法的内在函数
- firebase - 如何将数据从 Mongo db 迁移到 Firestore?