将 C 结构转换为 unsigned char

标签 c casting structure pragma

我有一个函数 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/

相关文章:

ios - Swift:从 String 创建 double 型将 0000000000001 附加到结果数

c# - 在 C# 中强制将一种程序集类型转换为另一种程序集类型

express - 在 Express.js 项目中使用 Yeoman/Brunch/Grunt

javascript - JavaScript 函数中的参数和临时变量

c - 从串口读取和写入,通过linux中的c中的环回

java - Ghost4J/Ghostscript - 尝试将字体嵌入 PDF 时出现错误 100

c - 将数组分成单独的 block

c - 传递给 main() 的参数名称是否重要

c++ - 在 C++ 中是否可以强制显式向上转换

ios - 如何让 XCode 4.2 识别自定义属性列表结构定义?