C++ 如何将uint16\u t更改为两个uint8\t?

C++ 如何将uint16\u t更改为两个uint8\t?,c++,bit-shift,masking,C++,Bit Shift,Masking,如何将一个uint16\u t转换为两个部件 uint16_t value = 0x7133; uint8_t partA = (uint8_t)((value & 0xFF00) >> 8); uint8_t partB = (uint8_t)(value & 0x00FF); std::cout << std::hex << partA << std::endl; std::cout << std::hex <

如何将一个uint16\u t转换为两个部件

uint16_t value = 0x7133;
uint8_t partA = (uint8_t)((value & 0xFF00) >> 8);
uint8_t partB = (uint8_t)(value & 0x00FF);
std::cout << std::hex << partA << std::endl; 
std::cout << std::hex << partB << std::endl;
uint16\u t值=0x7133;
uint8部分=(uint8部分)((值&0xFF00)>>8);
uint8_t partB=(uint8_t)(值&0x00FF);

std::cout将
uint8\u t
放入
cout
中得到
运算符8);
uint8\u t partB=静态强制转换(值&0x00FF);

std::cout您正在以正确的方式进行转换。令人困惑的输出是由于
uint8\t
与平台上的
char
类型相同。尝试将代码更改为

  std::cout << std::hex << (uint16_t)partA << std::endl; 
  std::cout << std::hex << (uint16_t)partB << std::endl;

std::hex没有任何效果?也很容易避免“警告:使用旧式cast to…}[-Wold style cast]”>(我相信我们都会打开此警告!)我更喜欢使用一行函数(包含该cast)进行转换,例如“uint scu(uint b){return static_cast(b);}”uint的使用支持自动升级。。。所以它只需要几个函数。@2785528
uintscu(uintb){returnstatic_cast(b)}
是完全无用的。只需编写静态强制转换,而不是将它们隐藏在一些命名不清(可能是错误的)函数后面……这是一个重复。让我们不要每次出现问题时都重复相同的答案。@Max如果你找到它,我会很高兴地删除它。这也会导致2x:警告:对'uint16_t'{aka'short unsigned int'}[-Wold style cast]使用旧样式转换
  std::cout << std::hex << (uint16_t)partA << std::endl; 
  std::cout << std::hex << (uint16_t)partB << std::endl;
71
33