下面是一个简单的测试程序,它说明了我所面临的问题:错误地使用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