c语言中有趣的写法

发布时间:2024年01月12日
 
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];
	}
}

文章来源:https://blog.csdn.net/Wekic/article/details/135559758
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。