我正在做UDP客户端服务器模型的事情,我的问题基本上归结为无法在此简短程序中打印数字65000。我得到的输出是: 0
struct pHeader{
uint16_t from = -1;
} pHead;
void formatPacket(pHeader header, char buffer[]) {
uint16_t u16;
u16 = header.from;
memcpy(buffer+2, &u16, 2);
}
int main () {
cout << "buffer" << endl;
char buffer[10];
pHead.from = 65000;
formatPacket(pHead, buffer);
cout << atoi(buffer+2) << endl;
}
我要做的下一件事是打印出一个也是16位数组的第一个元素中的值。我相信这样做是这样的:
.
.
.
buffer[2] = 0;
cout << atoi(buffer+0) << endl;
根据atoi()
的文档,如果无法执行有效的转换,它将返回零"。因此,您看到的零是atoi()
告诉您,在缓冲区中您给它的零是什么可以解释为数字的。
那是因为使用&u16
的CC_5填充了缓冲区的memcpy()
。u16
是65000,因此,假设一个小的架构,缓冲区[2]为 E8
,而缓冲区[3]为 FD
。这不是atoi()
可以解析的数字。
为了读取buffer[2]
的值,您需要进行memcpy()
的反面,这是另一个memcpy()
,如下:
uint16_t u16;
memcpy(&u16, buffer+2, 2);
cout << u16 << endl;