【发布时间】:2020-10-26 10:21:33
【问题描述】:
我想将一个无符号长整数逐字节复制到 char 缓冲区。 如果我使用注释下的行,它不会被复制到缓冲区。
char buf[128];
//unsigned long int_val = 268435456;
unsigned long int_val = 293456376;
cout << "Value of int_val: " << int_val << endl;
memset(buf, 0, sizeof(buf));
memcpy(buf, &int_val, sizeof(long));
cout << "Value after unsigned long int copy - buf: " << buf << endl;
const int len = strlen(buf);
cout << "buf" << endl << "====" << endl;
for (int i = 0; i < len; i++)
{
printf("%3d (0x%02X)\n", buf[i], buf[i]);
}
以下是每个值的两次运行的输出:
Value of int_val: 268435456
Value after unsigned long int copy - buf:
buf
===
Value of int_val: 293456376
Value after unsigned long int copy - buf: ��}
buf
===
-8 (0xFFFFFFF8)
-55 (0xFFFFFFC9)
125 (0x7D)
17 (0x11)
【问题讨论】:
-
充满随机字节的缓冲区不是字符串,不能在其上使用
strlen,也不能打印。此外,最好避免混合 stdio 和 iostream,即使只是为了美观。 -
您将
buf视为在多个位置以空字符结尾的字节字符串,但事实并非如此。 -
您希望得到什么输出?你知道打印
char指针的作用吗? -
你忘了在你的问题中提到你觉得奇怪的是什么。你期望结果是什么?