我需要从char数组中读回'id'和'port'。但是cout不会打印任何内容。正确的方法是什么?
谢谢您的帮助。
int main() {
char addr[6];
int id = 2;
short port = 1;
memcpy(&addr[0], &id, sizeof(int));
memcpy(&addr[4], &port, sizeof(short));
cout << "addres:" << addr << endl;
return 0;
}
答案 0 :(得分:3)
由于假设目标平台上的int为32位,所以您要将4个字节({writeChar
或0, 0, 0, 2
,取决于字节序)复制到2, 0, 0, 0
所指向的地址中,并且假设short是16位,则您要在addr
所指向的地址复制2个字节(0, 1
或1, 0
,具体取决于字节序),从而导致addr+4
包含字节addr
或0, 0, 0, 2, 0, 1
。
C ++中的C样式字符串以0结尾,因此,如果第一个字符为0,则2, 0, 0, 0, 1, 0
被解释为空字符串。
如果第一个字符为2,您仍然看不到任何内容,因为那不是可打印的字符。 (这是控制字符STX(文本开始)。)
答案 1 :(得分:0)
您可以打印addr
内容的整数值以了解其中的内容。
for (int i = 0; i < 6; ++i )
{
std::cout << "element " << i << " : " << static_cast<int>(addr[i]) << std::endl;
}
您很可能会得到:
element 0 : 2
element 1 : 0
element 2 : 0
element 3 : 0
element 4 : 1
element 5 : 0
假定:
sizeof(int)
在您的平台上为4。sizeof(short)
在您的平台上为2。使用时
cout << "addres:" << addr << endl;
您正在打印的字符串在第一个元素中具有不可打印的字符,而在第二个元素中具有空字符,即,您正在打印的空终止字符串仅包含不可打印的字符。