C语言:基于移位法 8位、16位、32位数据转

本文详细介绍了如何在编程中进行8位、16位和32位数据之间的转换,包括高低位划分、数据拆分以及使用方便的宏定义,帮助开发者理解和处理不同位宽的数据

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们一般情况下,将数据高低位是从左边到右边划分的,比如0x1234,其中,12为此段数据的高16位,34为数据的低8位数

8位转16位

将2个8位数据high、low合成一个16位数据data_u16:

data_u16 = (high<<8) | low;

16位转8位

将一个16位数据data_u16拆分成2个8位数据high、low:

	high = (data_u16 >> 8) & 0xff;	 	//高8位
	low = 	data_u16 	   & 0xff; 		//低8位

8位转32位

将4个8位数据data_u8[4]合成一个32位数据data_u32:

data_u32 = (data_u8[0]<<24)|(data_u8[1]<<16)|(data_u8[2]<<8)|data_u8[3];

32位转8位

将一个32位数据data_u32拆分成4个8位数据data_u8[4]:

data_u8[0] = (data_u32 >> 24) & 0xff;	 
data_u8[1] = (data_u32 >> 16) & 0xff; 	   
data_u8[2] = (data_u32 >> 8)  & 0xff;
data_u8[3] =  data_u32        & 0xff;
//高位在前,低位在后

16位转32位

将2个16位数据data_u16[2]合成一个32位数据data_u32:

data_u32 = (data_u16[0]<<16)|data_u16[1];

32位转16位

将一个32位数据data_u32拆分成2个16位数据data_u16[2]:

data_u16[0] = (data_u32 >> 16) & 0xffff;	 //高16位
data_u16[1] =  data_u32        & 0xffff; 	 //低16位

比较方便的宏定义应用:

用于计算:

16和8互转,同理,不一一赘述

#define NUM_H(x) ((uint16_t)x&0xFF00>>8)  //16取高8
#define NUM_L(x) ((uint16_t)x&0x00FF)     //16取低8

#define CHARtoINT(xH,xL) ((uint16_t)xH<<8+xL)  //高低8转16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值