uint32_t after = 0xe1ca95ee;
char new_buf[4];
memcpy(new_buf, &after, 4);
printf("%x\n", *new_buf); // I want to print the content of new_buf
Run Code Online (Sandbox Code Playgroud)
我想要的内容复制after到new_buf.但结果令人困惑.printf给了我ffffffee.它看起来像一个地址.我已经取消引用了new_buf.
根据评论,我不能使用memcpy或strncpy执行此任务.但为什么?memcpy并且strncpy只是为了处理char *?但内容after是在记忆中.
PS:我知道我应该使用sprintf或snprintf.如果你能解释为什么memcpy和strncpy不适用于这种情况,我很感激.
这就是问题所在:
printf("%x\n", *new_buf);
Run Code Online (Sandbox Code Playgroud)
这为您提供了所要求的内容:它使用%x格式在位置new_buf处打印char.该位置已包含0xee(在您成功的memcpy之后,首先是最不重要的字节,因为您最有可能在Intel机器上,小端),但它打印为0xffffffee(负数),因为它是一个字符而不是unsigned char,因为当然0xee是一个带符号的字节(> 0x7F,最高位集)
您应该使用:
printf("%x\n", *((unsigned int*)new_buf));
Run Code Online (Sandbox Code Playgroud)
...编辑如下......
更确切地说:
printf("%x\n", *((uint32_t*)new_buf));
Run Code Online (Sandbox Code Playgroud)