0

我正在编写一些代码,并且我有一点要获取一些二进制数据,然后想从中提取一些字节。所以,我有以下内容:

unsigned char * payload;
int payload_size;
uint32_t major = 0, minor = 0;
payload = out_resp.get_payload(&payload_size); // Retrieve the data, return a pointer
if(payload_size >= 8) { // Need at least 8 bytes in the payload
    std::copy(payload, payload + 4, &major);
    std::copy(payload + 4, payload + 8, &minor);
}

如您所见,有效载荷的前四个字节应放在 中major,接下来的四个字节应放在minor. 但是,在进行调试时,我注意到在第一个之后std::copy,我的变量payload设置为NULL!

这是预期的行为std::copy,还是出了什么问题?我是否应该通过简单地创建另一个指针并将其传递给来避免这种情况std::copy

4

1 回答 1

4

std::copy不像memcpy。您的std::copy(payload, payload + 4, &major);遗嘱副本:

(&major)[0] = payload[0];
(&major)[1] = payload[1];
(&major)[2] = payload[2];
(&major)[3] = payload[3];

这不是你需要的。(&major)[1]超出范围,因此分配给它会导致未定义的行为。

于 2013-03-28T01:50:32.220 回答