我有一个函数 UartSend() 可以通过 uart 向网络发送数据。它接受参数 unsigned char 和一个整数
UartSend(unsigned char *psend_data,int length);
我想通过这个函数发送一个结构
#pragma pack(push, 1)
struct packet
{
int a;
char b[3];
...
}PacketData;
#pragma pack(pop)
如何将此结构转换为 unsigned char 以通过 UartSend 发送此数据? 谢谢..
最佳答案
如果大小正确,您可以简单地转换为 unsigned char *
:
PacketData pkt;
UartSend((unsigned char *)&pkt, sizeof(pkt));
unsigned char *
在此上下文中实际上仅表示字节。
当然,在连接的另一端,您需要合并程序逻辑以重新转换为 PacketData
(或一些类似的结构)。
编辑:但是,请注意,正如@WhozCraig 在评论中指出的那样,如果您的目标平台与您的源平台不同,您需要考虑对齐问题(或者,依赖于GNU 扩展,如 __packed__
)
关于将 C 结构转换为 unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019073/