我需要将端口号存储在char数组中,以便可以将其写入套接字。该协议指定字节25和26用于端口号。我已经尝试了很多方法,但我现在可以用下面的方法来存储数字:
//msg is declared as char msg[50];
msg[25] = (uint8_t) (UDP_PORT / 256);
msg[26] = (uint8_t) (UDP_PORT % 256);然后,为了恢复套接字另一端的数字,我有:
uint8_t msb, lsb;
msb = msg[25];
lsb = msg[26];
int port = msb * 256 + lsb;任何建议都将不胜感激。
发布于 2011-11-30 22:06:43
你有没有尝试过,shift,and,or运算?
msg[25] = (uint8_t) ((UDP_PORT >> 8) & 0xff);
msg[26] = (uint8_t) (UDP_PORT & 0xff);然后
uint8_t msb, lsb;
msb = msg[25];
lsb = msg[26];
int port = (msb << 8) | lsb;您确定UDP_PORT是16位的值吗?...because如果它是32位的,则分区将无法隔离msb。当然,逐位操作将会。
发布于 2011-12-01 10:00:05
大多数以多字节二进制格式发送整数的协议将以网络字节顺序发送该值,以保持跨平台边界的一致性。使用套接字API的htons()和ntohs()函数在主机字节顺序(本地机器本地使用)和网络字节顺序之间转换整数,例如:
发送:
uint16_t *ptr = (uint16_t*) &msg[25];
*ptr = htons(UDP_PORT);接收:
uint16_t *ptr = (uint16_t*) &msg[25];
int port = ntohs(*ptr); 发布于 2011-11-30 22:50:54
也许这就是你想要的:
/* if UDP_PORT is a variable, and local machine is big-endian */
unsigned char *ptr = (unsigned char *)&UDP_PORT;
msg[25] = *ptr;
msg[26] = *(ptr + 1);然后:
/* if msg is a address variable */
unsigned short *ptr = (unsigned short *)(msg + 25);
int port = 0x0000FFFF & (unsigned short)*ptr;https://stackoverflow.com/questions/8327012
复制相似问题