在两个字节中发送一个整数

时间:2019-07-18 12:44:34

标签: c sockets

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

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

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

1 个答案:

答案 0 :(得分:3)

sprintf()不会这样做,部分是因为它专门用于处理字符串(不是二进制数据),部分是因为没有要转换的内容– C中的整数变量已经具有字节代表数字。

例如,如果您将变量声明为short intuint16_t,则该变量将始终以两个字节为单位保存数字,其中&Virtual表示内存地址,其中这些字节会保留,我相信您可以直接将memcpy()数据存储到网络缓冲区中。 (注意:某些类型的大小是固定的,其他类型在体系结构之间有所不同;请谨慎使用。)

您真正要做的唯一事情是确保字节顺序正确。这是另一种因CPU架构而异的事情,因此请使用htons()/ htonl()来获取适合通过网络发送的整数,并在接收到时使用ntohs()/ ntohl()将其转换回本机CPU格式。 / p>