memcpy uint32_t 转成 char*
Memcpy uint32_t into char*
我用不同的格式和类似的东西测试了一下。我们得到了一个任务,我们必须将 uint32_t 放入 char* 中。这是我使用的代码:
void appendString(string *s, uint32_t append){
char data[4];
memcpy(data, &append, sizeof(append));
s->append(data);
}
void appendString(string *s, short append){
char data[2];
memcpy(data, &append, sizeof(append));
s->append(data);
}
从字符串到字符很简单,我们必须将多个单位添加到字符*中。所以现在我只是这样称呼它:
string s;
appendString(&s, (uint32_t)1152); //this works
appendString(&s, (uint32_t)640); //this also works
appendString(&s, (uint32_t)512); //this doesn't work
我完全不明白为什么最后一个不能正常工作。我已经测试了 transform this 的多种变体。一种方法总是给我这样的输出(以位为单位):00110100 | 00110101 ...所以前 2 位始终为零,然后是 11,然后是我的一些随机数。我做错了什么?
假设 string
是 std::string
,则使用 std::string::append
的单参数版本,它假设输入数据以 NUL 结尾。你的不是,但是 append
无论如何都会去寻找第一个 NUL 字节。
512 是 0x00000100,在小端机器上是 0x00 0x01 0x00 0x00。由于第一个字节是 NUL,std::string::append()
停在那里。
使用您传入长度的 std::string::append()
版本。
我用不同的格式和类似的东西测试了一下。我们得到了一个任务,我们必须将 uint32_t 放入 char* 中。这是我使用的代码:
void appendString(string *s, uint32_t append){
char data[4];
memcpy(data, &append, sizeof(append));
s->append(data);
}
void appendString(string *s, short append){
char data[2];
memcpy(data, &append, sizeof(append));
s->append(data);
}
从字符串到字符很简单,我们必须将多个单位添加到字符*中。所以现在我只是这样称呼它:
string s;
appendString(&s, (uint32_t)1152); //this works
appendString(&s, (uint32_t)640); //this also works
appendString(&s, (uint32_t)512); //this doesn't work
我完全不明白为什么最后一个不能正常工作。我已经测试了 transform this 的多种变体。一种方法总是给我这样的输出(以位为单位):00110100 | 00110101 ...所以前 2 位始终为零,然后是 11,然后是我的一些随机数。我做错了什么?
假设 string
是 std::string
,则使用 std::string::append
的单参数版本,它假设输入数据以 NUL 结尾。你的不是,但是 append
无论如何都会去寻找第一个 NUL 字节。
512 是 0x00000100,在小端机器上是 0x00 0x01 0x00 0x00。由于第一个字节是 NUL,std::string::append()
停在那里。
使用您传入长度的 std::string::append()
版本。