将字节数组复制到未对齐的结构中

问题描述 投票:0回答:1

你好试图理解,为什么将字节数组复制到未对齐的字节结构中,我会丢失一些数据。也许有一种解决方法?

enter image description here

示例代码如下:

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));
}

enter image description here

c++ copy alignment byte structure
1个回答
1
投票

编译器将添加padding的字节

typedef struct {  //Not aligned data
    uint32_t val0;
    uint8_t  val1; 
        uint8_t padding;
    uint16_t val2;
    uint32_t val3;
}TestSt_t; 

所以0x66在那个padding字节中。

© www.soinside.com 2019 - 2024. All rights reserved.