gpt4 book ai didi

c - 发送两个字节的整数

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:07 24 4
gpt4 key购买 nike

我要用两个字节传输一个整数。如您所知,通过使用 sprint 函数,它将您的号码拆分为 ASCII 并发送(对我而言,通过以太网连接)。例如:

sprintf(Buffer,"A%02ldB",Virtual);

我的虚拟号码在 0 到 3600 之间。通过使用 sprintf 函数,它发送 ASCII 码(3600 转换为 4 个 ASCII 字节)。然而,通过将 3600 转换为二进制形式,我们可以看到我们可以将其压缩为 12 位(或两个字节,其中 13-16 之间的位未使用)。但是我不能再次发送二进制代码,因为 sprintf 为每个 1 和 0 发送 ASCII 代码。如果我可以将我的虚拟变量转换为两个字节,我可以增加我的字节传输。那么我如何将一个变量转换为两个字节并通过 sprintf 函数将它们转换成它们呢?

最佳答案

sprintf() 不执行此操作,部分原因是它专门用于处理字符串(而非二进制数据),部分原因是没有任何内容可转换 - C 中的整数变量已经有字节代表数字。

例如,如果您将变量声明为 short intuint16_t,它将始终以正好两个字节的形式保存您的数字, &Virtual 表示保存这些字节的内存地址,我相信你可以直接将数据 memcpy() 到你的网络缓冲区中。 (注意:某些类型具有固定大小,其他类型因体系结构而异;请小心处理这些。)

在发送之前您真正应该做的唯一一件事就是确保字节的顺序正确。这是另一个因 CPU 架构而异的事情,因此使用 htons()/htonl() 获取适合通过网络发送的整数,并在接收后使用 ntohs()/ntohl() 将其转换回 native CPU 格式。

关于c - 发送两个字节的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com