下面是一個簡單的測試程序,它說明了我所面臨的問題:錯誤地使用std :: copy?
#include <iostream>
#include <stdlib.h>
#include <inttypes.h>
#include <vector>
using namespace std;
typedef unsigned char Byte;
int main()
{
uint32_t ui32 = 12;
size_t sizeofUi32 = sizeof ui32;
cout << "sizeofUi32: " << sizeofUi32 << endl;
vector<Byte> v(10);
std::copy(&ui32, &ui32 + sizeof ui32, &v[4]);
uint32_t result = 0;
std::copy(&v[4], &v[4] + sizeof ui32, &result);
cout << "Result: " << result << " sizeofUi32: " << sizeofUi32 << endl;
return 0;
}
輸出:
sizeofUi32: 4
Result: 12 sizeofUi32: 17179869184
我想這個問題可能是由於到std ::複製接受迭代器不是指針,而是從我在SO here了,
的指針是一個迭代
所以我的示例代碼必須有一個簡單的問題,我錯過了。但我無法發現它。 你能解釋一下,這裏有什麼問題嗎?
編輯1:
從我上心的答案,即反序列化的字節向量,如果我知道正確的順序和類型在矢量存儲的數據的,我能避免使用std所以: :複製並將矢量值分配給適當類型的變量。它有效,但安全嗎?
uint32_t a = v[4];
uint8_t b = v[8];
您可能想使用'std :: copy_n' –
@AlexandreC。,對!感謝您的提示 – rightaway717