今天在调试一个测温模块的时候遇到十六进制的高位和低位组合,板子通过串口发送指令给模块,并读取模块返回的温度值,但是模块返回的是一个十六进制的报文,实际温度值是分为两个十六进制数的,高位在前,低位在后,比如返回的是0x01,0x2e,实际的温度用十六进制表示就是0x012e,十进制就是302,实际温度值除以10就可以了。但是写代码的时候突然就迷糊了,刚开始想到的是两个数相与就可以了,但是用计算器折腾了一番,发现不行,经过一番冥思苦想终于搞定了,记录一下,以免下次又忘记。
分离高位和低位
先看一下怎么分离高位和低位,这个百度一下方法还是挺多的。以0x1234为例,取出它的高位与低位
8 #include<stdio.h>
9
10 int main(int argc, char **argv)
11 {
12 int a = 0x1234;
13 int b[2];
14
15 b[0] = (a & 0xff00) >> 8;//取高位
16 b[1] = a & 0xff;//取低位
17
18 printf("%02x %02x\n", b[0], b[1]);
19
20 return 0;
21 }
高位和低位组合
8 #include<stdio.h>
9
10 int main(int argc, char **argv)
11 {
12 int a = 0x12;
13 int b = 0x34;
14 int c;
15
16 c = (a << 8) | b;//先将高位左移,在与低位相与
17
18 printf("%x\n", c);
19
20 return 0;
21 }