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);
}

ご覧のとおり、ペイロードの最初の 4 バイトは に、次の 4 バイトは に配置する必要がありmajorますminorstd::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 に答える