将C结构转换为unsigned char

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发送此数据?谢谢..

sap*_*api 5

如果unsigned char *您的尺寸正确,您可以简单地投射到:

PacketData pkt;
UartSend((unsigned char *)&pkt, sizeof(pkt));
Run Code Online (Sandbox Code Playgroud)

unsigned char * 在这种情况下,真正意味着字节.

当然,在连接的另一端,您需要合并程序逻辑以重新转换为PacketData(或某些类似的结构).

编辑:但是,请注意,正如@WhozCraig在评论中指出的那样,如果您的目标平台与源平台不同,则需要考虑对齐问题(或者,依赖于GNU扩展__packed__)