求问一个强制转换类型的问题。

2019-10-15 00:28发布

本帖最后由 vention 于 2017-2-23 11:48 编辑

我定义了一个结构体,总共应该是19个Byte,我再定义一个 20Byte 的 buf数组。
将类开辟空间赋值完后, 强制转换为 unsigned char 后,放进数组buf。
复完值后,我拷贝进去  ac_buf这个数值。  却发现在Frame_CRC 和 Frame_Cmd 之前多了一个Byte,请问是怎么回事。
buf 的0 ~17 个Byte 与 结构体的 前 18个Byte一样。 后面的数值也一样,就是拷贝过去的时候为何中间多了一个Byte?
对比如截图。

unsigned char ac_buf[20]={0};
typedef struct
{
        unsigned char        Frame_FCS;                 
        union_Func_type      Frame_Func;                 
        unsigned short int   Frame_Rvd;         
        unsigned long int    Frame_CID[3];   
        unsigned char        Frame_Cmd;                 
        unsigned short int   Frame_CRC;                 
}Send_Command_Frame_type;    //1Byte + 1Byte + 2Byte + 3*4Byte + 1Byte + 2Byte = 19Byte

Send_Command_Frame_type     *pSend_Command_Frame;

memcpy(ac_buf,pSend_Command_Frame,20);

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
DongInker
1楼-- · 2019-10-15 02:21
unsigned long int    Frame_CID[3];   
        unsigned char        Frame_Cmd;                 
        unsigned short int   Frame_CRC;  

这样定义 unsigned char        Frame_Cmd;  会多一个字节 ,这是对齐问题,对齐是2的倍数如1 2 4,当中间变量出现单时,如( 双 单 双) 中间的 单 会自动补齐为双字节。
操作系统
2楼-- · 2019-10-15 04:46
应该只有字节节数相同.才合适强制转换吧.不然的话怕是会有问题.其实就是一个对齐的问题.
漂泊的雨林
3楼-- · 2019-10-15 06:17
 精彩回答 2  元偷偷看……
vention
4楼-- · 2019-10-15 12:09
操作系统 发表于 2017-2-22 17:48
应该只有字节节数相同.才合适强制转换吧.不然的话怕是会有问题.其实就是一个对齐的问题.

其实我一开始是 buf是19个字节的。然后就是一直的掉了一个Byte,一直不见一个Byte ,我才把buf弄成 20个字节看下。
vention
5楼-- · 2019-10-15 17:07
漂泊的雨林 发表于 2017-2-22 17:49
这个可能是对齐问题吧 你这个结构体本身就是20个字节的长度

如何计算出结构体本身就是20个字节?? 我就是很奇怪这一点
操作系统
6楼-- · 2019-10-15 21:23
sizeof

一周热门 更多>