我正在研究一些代码,我有一点我会抓取一些二进制数据,然后想从中提取一些字节。所以,我有以下内容:
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
?
答案 0 :(得分: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]
超出范围,因此分配它会导致未定义的行为。