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";
感谢您的回答和评论!
我在使用 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";
感谢您的回答和评论!
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";
感谢您的回答和评论!