Networking message formatting a lot of char, int, converting in CC++
我正在做C++编程中的网络编程,作业要求我发送格式化的消息。
格式如下:
1 2 3 | bits: 0.....15 16....31 update# port# Sever-IP |
如你所见,第一行请我:
将int转换为16位,使2个int组成32位。
将xxx.xxx.xxx.xxx转换为32位。
我使用的是UDP,所以我需要将这些信息放入char[],这是最困难的部分。在我的程序中,更新和端口是int,服务器IP地址是字符串。我怎样才能把它们转换成这些比特?
以下是我的尝试:
把它们扔成炭。但是,我需要把一个整数变成两个字符。
把它们转换成一个字符串,然后再转换成string.c_str(),但它给了我一个4字节的指针。
最简单的方法是为头创建这样的结构:
1 2 3 4 5 6 7 8 9 | #pragma pack(push,1) struct header { unsigned short updateNumber; unsigned short port; unsigned long ip; }; #pragma pack(pop) |
像这样使用:
1 2 3 4 5 6 | char *buffer = new char[sizeof(header)+sizeOfRemainingMessage]; header *head = (header*)buffer; head->update = 1; head->port = 80; head->ip = // convert ip string to unsigned long* send(buffer); |
号
*要将IP字符串转换为无符号长字符串,请参阅inet_addr()。
C++中的int或long int是4字节(32位),但它可以依赖于实现。使用sizeof运算符检查类型的大小。
然后,您可以使用shift操作符将更新值和端口值依次放入其中。
对于字符串,基本上是一样的:您必须将它分成四段,将每段转换成一个整数,并在一个长整型整数内移动正确数量的每段。