Shi*_*hab 1 c casting structure pragma
我有一个函数UartSend()通过uart将数据发送到网络.它需要参数unsigned char和一个整数
UartSend(unsigned char *psend_data,int length);
Run Code Online (Sandbox Code Playgroud)
我想通过这个功能发送一个结构
#pragma pack(push, 1)
struct packet
{
int a;
char b[3];
...
}PacketData;
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
如何将此结构转换为unsigned char以通过UartSend发送此数据?谢谢..
如果unsigned char *您的尺寸正确,您可以简单地投射到:
PacketData pkt;
UartSend((unsigned char *)&pkt, sizeof(pkt));
Run Code Online (Sandbox Code Playgroud)
unsigned char * 在这种情况下,真正意味着字节.
当然,在连接的另一端,您需要合并程序逻辑以重新转换为PacketData(或某些类似的结构).
编辑:但是,请注意,正如@WhozCraig在评论中指出的那样,如果您的目标平台与源平台不同,则需要考虑对齐问题(或者,依赖于GNU扩展__packed__)