0

我正在将输入的十进制值转换为十六进制,然后我想将该值转换如下:

因此,如果 51200 转换为十六进制:0000 c800

现在我想将此值移动 2 个十六进制数字(8 位): 00c8 00 00

这都是因为我试图将转换和移位的值传递到需要的微控制器寄存器中;

32 位 = 24+8(24 位整数部分,8 位小数位)

这是我的代码,我得到的输出为0x0000C800 但正如我所说,我现在想将此值移动 8 位以获得 0x00C800 00

void PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{
  char tmp[16];
  uint16_t LSB = data & 0xffff;
  uint16_t MSB = data >> 16;
  sprintf(tmp,"0x%.4X%.4X%", MSB, LSB);
  Serial.println(tmp);
  // Serial.println(temp2);
  Serial.println("************");
}

编辑:根据大卫的评论试用两个; 所以我尝试在转换之前转换它,但没有运气!输出:0x00000000

void PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{ 
  uint32_t data2 = data2<< 8;
  char tmp[16];
  uint16_t LSB = data2 & 0xffff;
  uint16_t MSB = data2 >> 16;
  sprintf(tmp,"0x%.4X%.4X%", MSB, LSB);
  Serial.println(tmp);

  // Serial.println(temp2);
  Serial.println("************");

}

当我精疲力竭时,任何帮助都将不胜感激!

4

0 回答 0