首页 > 解决方案 > 为什么我的 Char* 在填充整数后为空?

问题描述

我想在一个 char 指针中保存几个整数,然后用 sendto (winsock2) 发送这个指针。不幸的是,我的 char 指针总是只包含“\n”。就在创建时和填充后。我做错了什么?

uint32_t id = getID();
uint8_t inputType = getInputType(), inputValue = getInputValue();
char* inputBuffer = new char[6];
inputBuffer[0] = (id >> 24) & 0x000000ff;
inputBuffer[1] = (id >> 16) & 0x000000ff;
inputBuffer[2] = (id >> 8) & 0x000000ff;
inputBuffer[3] = (id >> 0) & 0x000000ff;
inputBuffer[4] = (inputType >> 0) & 0x000000ff;
inputBuffer[5] = (inputValue >> 0) & 0x000000ff;

// Send to Server
sendto(socket, inputBuffer, 6, 0, (SOCKADDR*)&srvAddr_In, sizeof(SOCKADDR));

delete[] inputBuffer;

id、inputType 和 inputValue 始终包含有效数字。例如,我尝试了 id = 10、inputType = 4 和 inputValue = 6

标签: c++networkingchar

解决方案


您的 char 指针不包含'\n',至少不在第一个位置。相反,它包含NUL作为第一个元素,因此当显示为 C 样式字符串时它将显示为空白。

& 0xff这是因为用 获得的最低有效 8 位 10右移 24 次为零。

char缓冲区中有数据。特别注意inputBuffer[3]它的值是 10。只是你不能用你最喜欢的字符串查看器看到它!

最后,考虑使用unsigned char而不是char,因为 的签名char是平台相关的。( C++14 之前的charif的补充方案也是如此)。signed


推荐阅读