我测试了一些不同的格式和类似的东西。我们得到了一个任务,我们必须将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到char很简单,我们必须在char *中添加多个uint。所以现在我只是称之为:
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
我绝对不明白为什么最后一个不能正常工作。我测试过多种变换。一种方式总是给我输出像(以位为单位):00110100 | 00110101 ...所以前两位总是零,然后是11,然后是一些随机数字..我做错了什么?
答案 0 :(得分:3)
假设string
是std::string
,则使用std::string::append
的单参数版本,假设输入数据是NUL终止的。你的不是,但append
无论如何都会去寻找第一个NUL字节。
512是0x00000100,在小端机器上是0x00 0x01 0x00 0x00。由于第一个字节是NUL,std::string::append()
会停在那里。
使用传递长度的std::string::append()
版本。