C++ 中的 memcpy 不会将 u_int32_t 复制到 unsigned char*

memcpy in C++ doesn't copy u_int32_t to unsigned char*

我在使用 memcpy 功能时遇到问题。

我需要创建一个 unsigned char 的数组,包含三个部分:id、数据数组的大小、数据数组。但是第一部分我还做不到。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <string>

int main() {    
    u_int32_t OID;
    unsigned char *serialized;
    
    OID = (u_int32_t)5;
    
    serialized = new unsigned char[sizeof(u_int32_t)];
    
    memcpy(serialized, &OID, sizeof(u_int32_t));
    
    std::cout << "After inserting OID: <" << serialized << ">\n";
    
    memcpy(serialized, "test", sizeof(u_int32_t));
    
    std::cout << "After inserting \'test\': <" << serialized << ">\n";

}

此代码生成的输出是:

    After inserting OID: <> 
    After inserting 'test': <test>

我不明白为什么在第一种情况下,memcpy 不会将 OID 复制到 serialized,而在第二种情况下,它会复制字符串 test正确。

如果你能帮助我就太好了。

提前谢谢你。

解决方案

我在打印 serialized 时试图获取数字 5。但这是不正确的。最合适的是做这样的事情:

u_int32_t answer;
memcpy(&answer, serialized, sizeof(u_int32_t));
std::cout << "Answer: <" << answer << ">\n";

感谢您的回答和评论!

ASCII 中的

5 是不可打印的,因为它是一个控制字符。 ASCII Table

您可以尝试下面的操作,它会按预期打印 a

OID = (u_int32_t)'a';

解决方案

我在打印 serialized 时试图获取数字 5。但这是不正确的。最合适的是做这样的事情:

u_int32_t answer;
memcpy(&answer, serialized, sizeof(u_int32_t));
std::cout << "Answer: <" << answer << ">\n";

感谢您的回答和评论!