【发布时间】:2015-11-18 21:23:19
【问题描述】:
我有代码
#include <iostream>
#include <string.h>
using namespace std;
int main() {
// your code goes here
uint8_t x[4] = {55, 11, 0, 20};
uint16_t y;
memcpy(&y, &x[0], 2);
std::cout<<y<<std::endl;
return 0;
}
(十六进制 55 - 37,十六进制 11 - B) 我希望 y 包含“37B”(即十进制的 - 891)。但是,Y 实际上包含“B37”(即十进制的 2871)。如何在没有字节序交换操作的情况下使用 memcpy 维护顺序。
【问题讨论】:
-
不管字节顺序如何,
37B是不可能的——那么你已经完全丢失了半个字节。 -
@PaoloM 从示例中可以看出,数组的 2 个元素被复制到一个变量中(即数组元素的 2 倍大小)。您的建议只分配一个数组元素。
-
除此之外:将所有内容都以十六进制编写并避免以十进制讨论事物会更具可读性。您也可以在代码中执行此操作:例如
{0x37, 0x0b, 0x00, 0x14}和std::cout << std::hex << y << std::endl;.
标签: c++