将 4 个字节的向量转换为 int C++

Gil*_*lad 0 c++ vector

我的函数 read_address 始终返回 4 个字节的向量

对于其他用例,它是一个向量而不是 const 数组

在这个用例中我总是返回 4 个字节

std::vector<uint8_t> content;
 _client->read_address(start_addr, sizeof(int), content);
 uint32_t res = reinterpret_cast<uint32_t>(content.data());
 return res;
Run Code Online (Sandbox Code Playgroud)

这是称为内容的向量 在此输入图像描述

它总是相同的值

但是“res”的值总是变成随机数你能解释一下我的错误吗

sel*_*bie 7

您的代码将指针值(随机地址)转换为整数,而不是引用它指向的内容。轻松修复。

而不是这个:

uint32_t res = reinterpret_cast<uint32_t>(content.data());
Run Code Online (Sandbox Code Playgroud)

这:

uint32_t* ptr = reinterpret_cast<uint32_t*>(content.data());
uint32_t res = *ptr;
Run Code Online (Sandbox Code Playgroud)

语言律师可能会对上述内容提出异议。因为在某些平台上在未对齐的边界上复制数据可能会出现问题。因此,将 4 个字节从内容中复制到 32 位整数的地址中就足够了:

memcpy(&res, content.data(), 4);
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,除非“uint8_t”是“unsigned char”或“std::byte”的别名,否则这违反了严格的别名规则,从而调用未定义行为。 (2认同)
  • @MarekR - 告诉我更多。我想接受这方面的教育。 (2认同)
  • https://codereview.stackexchange.com/a/199946/204571 (2认同)