std :: copy:copy仅发生1个字节而不是指定长度

Nik*_*hil -1 c++

请参阅下面的代码段:

#include <iostream>
using namespace std;

int main()
{
uint32_t len, x;
char abc[] = "12345678";
uint8_t *ptr = (uint8_t *)abc;
copy(ptr, ptr + 4, reinterpret_cast<uint32_t*>(&len));
cout << " len: " << len << endl;
} 
Run Code Online (Sandbox Code Playgroud)

输出是49!我希望输出为1234.我错过了什么

Kon*_*lph 5

您的目标是长度为1的"容器"(即单个对象len).

您正在将四个后续字节值复制到此容器中,这当然会失败 - 特别是,它会导致溢出,因为目标只有一个元素的空间.

代码中的其他错误(不是详尽的列表):

  • 您会混淆字符代码及其字符串表示
  • 您正在执行冗余演员表

第一点尤其相关,因为您实际想要做的是将字符串的前四个字符中编码的数字解析为十进制数字.但你实际上做的是复制它的字符代码.

要用C++解析数字,请使用as std::stringstream或者,因为C++ 11,std::stoi