【发布时间】:2016-02-24 14:55:01
【问题描述】:
我正在尝试运行此代码:
#include <iostream>
#include <string>
#include <cstdint>
#include <array>
int main()
{
std::array<std::uint8_t, 2> one_byte_array;
one_byte_array[0] = 0xff;
one_byte_array[1] = 0x00;
auto ptr8 = one_byte_array.data();
std::uint16_t* ptr16 = (std::uint16_t*)ptr8;
std::cout << *ptr16;
return 0
}
它输出:
255
我认为它应该输出:
65280
因为0xff 代表新word 的MSBs,而0x00 代表新word 的LSBs。我错过了什么?
【问题讨论】:
-
你的机器上运行这段代码的 CPU 是多少?你确定 CPU 使用的是大端序吗?
-
@ErikAlapää,工会也不好:)
-
@ErikAlapää,将其作为答案发布,以便我投反对票;)
-
@ErikAlapää:这就是你对健全编译器的定义。它不是我的。我的定义是执行标准的。
-
公牛。
memcpy成语是正确的,并不复杂。