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>4)&0xF];
		str[n++]="0123456789ABCDEF" [(dat[i]>>0)&0xF];
	}
}

你可能感兴趣的:(编程基础,c语言)