c语言中有趣的写法

 
str[n++] = "0123456789ABCDEF" [(dat[i] >> 4) & 0xF];

这行代码主要做了两件事情:

  1. 计算一个数值。
  2. 将这个数值赋值给 str[n++]

现在,我会详细解释每个部分:

  1. "0123456789ABCDEF":这是一个字符串,包含了16个字符。
  2. [(dat[i] >> 4) & 0xF]:这部分是计算的核心。我们可以拆分为两部分来理解:

a. dat[i] >> 4:这部分是位运算中的右移操作。dat[i] 是一个整数,其值被右移了4位。例如,如果 dat[i] 的值为 0x1234,那么右移4位后变为 0x1200

b. & 0xF:这部分是位运算中的与操作。0xF 是十六进制数,其二进制表示是 00001111。这个操作将 dat[i] >> 4 的结果与 00001111 进行与操作,保留最后4位,其他位清零。例如,如果 dat[i] >> 4 的结果是 0x1200,那么与操作后得到的结果是 0x0000
3. str[n++]:这是一个数组的元素,并且使用后自增的方式赋值。这意味着 n 的值会增加1,指向数组的下一个位置。

总结一下,这行代码的目的是从 dat[i] 中提取高4位的信息,然后在 "0123456789ABCDEF" 中找到对应的字符,最后将这个字符赋值给 str[n++]

应用,(数据转换成16进制字符串)

void  datToHexStr(uint8_t *dat,uint8_t*str ,uint16_t datLen)
{
	if(datLen==0)return;
	for(uint16_t i=0,n=0;i<datLen;i++)
	{
		str[n++]="0123456789ABCDEF" [(dat[i]>>4)&0xF];
		str[n++]="0123456789ABCDEF" [(dat[i]>>0)&0xF];
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值