c - 如何在 C 中创建字节数据包?

标签 c

我只是想知道如何在 C 中创建字节数据包。我需要这样的数据包:

类型: Unisgned Char 1 字节

名称:字符 7 字节

Mac:字符 13 字节

随机数:字符 7 字节

数据:字符 50 字节

这将是一个具有 1 字节字符的结构,但问题是大小:

struct PDU{
    unsigned char code;
    char name;
    char mac;
    char RNumber;
    char data;
}

如何更改字符的大小?

谢谢

最佳答案

您无法更改 char 的大小 - 但您可以为每个项目创建足够长的 char 列表(这些是称为“数组”):

struct PDU{
    unsigned char code;
    char name[7];
    char mac[13];
    char RNumber[7];
    char data[50];
};

谨防结构填充:C 编译器可以自由地在每个项目之间添加填充字节。它可能会这样做,因为访问“字对齐”数据通常比“任何字节”更快。您可以通过在此结构之前添加特殊的编译器指令来指示编译器不要这样做,通常(检查您的编译器手册!)类似于

#pragma pack(1)

如果在此结构定义之后还有其他结构定义不需要删除其填充,请再次查找恢复正常服务的说明并将其添加到该结构定义下方。

将数据复制到此结构中时,绝对不要复制“越界”并覆盖下一项中的数据,这一点绝对重要。 (这适用于所有 C 语言程序,但我不妨再次提及。)

关于c - 如何在 C 中创建字节数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383312/

相关文章:

c - 打开 FIFO 进行写入返回 "No such device or address"

c - VT100 转义码从 C 程序中移动光标,行为怪异

c++ - 税务计算器问题

c - 如何检查对齐是否在 C 中有效?

c - "expected specifier-qualifier-list before ‘*’ token “可变参数函数中的错误

c - 使用循环在 C 中打印模式

c++ - Windows环境下从源码构建libxml2

c++ - 最大的回文产品-程序无法运行,写了解决方案但无法理解问题

c - 为什么我们在将多维数组传递给函数时可以省略它的第一维

c - 一般竞赛条件