我是 C 编程的新手,我正在测试一些代码,在这些代码中我接收和处理格式如下的 UDP 数据包:
UINT16 port1
UINT16 port2
本次测试对应的值为:
6005
5555
如果我打印整个数据包缓冲区,我会得到如下信息:
u^W³^U><9e>^D
我怎样才能打破它并获得正确的价值观?我已经尝试过uint16_t
,unsigned short
甚至是函数htons
,但也没有用我只是得到错误的数字,我正在尝试这样的事情:
int l = 0;
unsigned short *primaryPort = *(unsigned short*) &buffer[l];
AddToLog(logInfo, "PrimaryPort: %u\n", primaryPort);
l += sizeof(*primaryPort);
unsigned short *secondaryPort = *(unsigned short *) &buffer[l];
AddToLog(logInfo, "SecondaryPort: %u\n", secondaryPort);
l += sizeof(*secondaryPort);
获得这些值的正确或最佳方法是什么?我认为这两个 uint16 值不是整数格式,我认为这只是这个uint16
字符上的一个字符文本u^W³^U><9e>^D
,所以我可能得到错误的数字,因为我正在像整数一样处理。但是我已经尝试了所有方法,但我无法获得正确的值。