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

如何在C中创建字节数据包?,c,C,我只是想知道如何用C创建字节数据包。我需要这样的数据包: 类型:未签名字符1字节 名称:字符7字节 Mac:Char 13字节 随机数:字符7字节 数据:字符50字节 这将是一个具有1字节字符的结构,但问题是大小: struct PDU{ unsigned char code; char name; char mac; char RNumber; char data; } 我怎样才能改变chars的大小 谢谢您不能更改字符的大小,但您可以为每个项目创建足

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

类型:未签名字符1字节

名称:字符7字节

Mac:Char 13字节

随机数:字符7字节

数据:字符50字节

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

struct PDU{
    unsigned char code;
    char name;
    char mac;
    char RNumber;
    char data;
}
我怎样才能改变chars的大小


谢谢

您不能更改字符的大小,但您可以为每个项目创建足够长的字符列表,这些项目称为数组:

struct PDU{
    unsigned char code;
    char name[7];
    char mac[13];
    char RNumber[7];
    char data[50];
};
注意结构填充:C编译器可以自由地在这些项之间添加填充字节。这可能是因为访问“字对齐”数据通常比“任何字节”都快。您可以通过在此结构之前添加特殊的编译器指令来指示编译器不要这样做,通常请查看编译器手册!差不多

#pragma pack(1)
如果在此结构定义之后还有其他不需要删除填充的结构定义,请再次查找恢复正常服务的指令,并将其添加到此结构定义下面


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

stdint.h定义了8位长的有符号整数和无符号整数。我知道我必须使用一个结构——对一个结构进行编码,看看它是否适合你的需要?这只是一个建议,如果你不能声明一个C结构符合你在问题中列出的领域,某种东西告诉我一个结构布局只是即将成为一个非常非常大的冰山的一角;就像你需要这个一样。@Sibidharan:char不能是无符号的,因为它没有符号???我建议你做一些研究,比如,在发出这种类型的语句之前,先学习最基础的C课程。特别是,若你们选择在他们前面加上“你们在开玩笑吗”的语句@Sibidharan signed char至少提供了-127到127的范围-128到127是常见的7位值+1位符号unsigned char至少为您提供了0到255的范围。@Sibidharan另外,该页在多个级别上至少部分错误。C标准不保证A..Z或A..Z是连续的,尽管它保证0..9是连续的。C标准也不能保证这些值是ASCII码,所以开头的句子是错误的。如果你想知道为什么这是重要的,考虑一下在编码一个假设为A.Z的连续性的循环时会发生什么不适。