首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何精确地将n位写入UDP数据包c++

如何精确地将n位写入UDP数据包c++
EN

Stack Overflow用户
提问于 2014-03-04 22:37:07
回答 2查看 479关注 0票数 0

为了了解我的大学内容,我决定开始使用UDP和新的线程内存模型在c++11中编写一个网络库。这是我目前最大的障碍。

字节的大小是特定于平台的。Memcpy根据该平台上字节的大小进行复制和写入。那么,我如何编写与平台无关的代码来精确地将N位写入我的UDP数据包呢?N通常是8的倍数,但我需要确保在处理N个字节时,不管平台如何,都会修改相同数量的位。

我认为最接近解决方案的方法是建立一个32位的基本结构,并将其作为一个由8位组成的组访问。

代码语言:javascript
复制
struct Data
{
    char a : 8;
    char b : 8;
    char c : 8;
    char d : 8;
}

这样,我知道每个字符将被限制为8个字节。我的消息都是32的倍数-这没问题(这个结构在处理endianness时实际上会有所帮助)。但是,如何确保编译器不会将结构放置到平台的本机边界?这个能行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 00:19:47

您的数据结构不够。编译器将char类型定义为signed char (7个数据位、1个符号位)、unsigned char (8个数据位)或char

大多数发送数据包的计算机对八进制使用unsigned charuint8_t

此外,要注意多字节排序,即Endianness。大端字节是最重要的字节的第一位,而最小的字节是第一位的。

许多消息传递方案会用零填充剩余位,使其达到8位、16位或32位。

票数 1
EN

Stack Overflow用户

发布于 2014-03-05 00:28:40

您可能正在寻找#pragma pack(nopack)指令。然而,正如有人指出的,你仍然要处理8位的倍数。

char应该始终是1字节,AFAIK,虽然我可能错了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22184651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档