我正在处理一些代码,但有一点要抓住一些二进制数据,然后要从中提取一些字节。因此,我有以下内容:
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
来避免这种情况? 最佳答案
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]
超出范围,因此对其进行分配会导致未定义的行为。关于c++ - std::copy设置为null的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15672748/