目录

十六进制数高位和低位的结合与分离

今天在调试一个测温模块的时候遇到十六进制的高位和低位组合,板子通过串口发送指令给模块,并读取模块返回的温度值,但是模块返回的是一个十六进制的报文,实际温度值是分为两个十六进制数的,高位在前,低位在后,比如返回的是0x01,0x2e,实际的温度用十六进制表示就是0x012e,十进制就是302,实际温度值除以10就可以了。但是写代码的时候突然就迷糊了,刚开始想到的是两个数相与就可以了,但是用计算器折腾了一番,发现不行,经过一番冥思苦想终于搞定了,记录一下,以免下次又忘记。

分离高位和低位

先看一下怎么分离高位和低位,这个百度一下方法还是挺多的。以0x1234为例,取出它的高位与低位

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  #include<stdio.h>
   
  int main(int argc, char **argv)
  {
      int a = 0x1234;
      int b[2];
  
      b[0] = (a & 0xff00) >> 8;//取高位
      b[1] = a & 0xff;//取低位
  
      printf("%02x %02x\n", b[0], b[1]);
  
      return 0;
  }

高位和低位组合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  #include<stdio.h>
   
  int main(int argc, char **argv)
  {
      int a = 0x12;
      int b = 0x34;
      int c;
  
      c = (a << 8) | b;//先将高位左移,在与低位相与
  
      printf("%x\n", c);
  
      return 0;
  }