Memcpy uint32_t成char *

时间:2017-11-16 19:13:03

标签: c++ arrays char memcpy uint32

我测试了一些不同的格式和类似的东西。我们得到了一个任务,我们必须将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,然后是一些随机数字..我做错了什么?

1 个答案:

答案 0 :(得分:3)

假设stringstd::string,则使用std::string::append的单参数版本,假设输入数据是NUL终止的。你的不是,但append无论如何都会去寻找第一个NUL字节。

512是0x00000100,在小端机器上是0x00 0x01 0x00 0x00。由于第一个字节是NUL,std::string::append()会停在那里。

使用传递长度的std::string::append()版本。