tem >> 8 这是高字节在前 还是低字节在前
时间: 2023-12-28 10:03:28 浏览: 111
这是高字节在前(Big Endian)的写法。在这个表达式中,"tem >> 8" 是将变量tem右移8位,其结果是取tem变量的高8位。在Big Endian的编码方式中,高字节存储在低地址中,低字节存储在高地址中,因此在网络传输中,高位字节应该先被发送。这也是为什么在网络协议中常用Big Endian编码方式。
相关问题
解释一下这段程序:tem = (buff[0]<<8) + buff[1]; hum = (buff[3]<<8) + buff[4]; tem = ((buff[0]<<8) | buff[1]);//将buff[0]采集到的温度8位数据与buff[1]采集到的低8位数据相或,实现温度拼接 hum = ((buff[3]<<8) | buff[4]);//将buff[3]采集到的湿度8位数据与buff[4]采集到的低8位数据相或,实现湿度拼接
这段程序是关于将温湿度传感器采集到的数据进行拼接的。温湿度传感器一般会将温度和湿度的数据分别以两个字节的形式传输,因此需要将这两个字节的数据拼接成一个完整的温度或湿度值。
具体来说,这段程序中的buff数组保存了从传感器采集到的温湿度数据,其中buff[0]和buff[1]保存了温度数据的高8位和低8位,buff[3]和buff[4]保存了湿度数据的高8位和低8位。tem和hum分别表示温度和湿度的变量。
第一行代码是将buff[0]左移8位,然后加上buff[1],实现将温度数据的高8位和低8位拼接成一个16位的完整温度值。同理,第二行代码是将湿度数据的高8位和低8位拼接成一个16位的完整湿度值。
第三行和第四行代码使用了按位或(|)运算符,将温度和湿度的高8位和低8位拼接成完整的16位值。这两种方式实现的效果是一样的,只是实现的方法稍有不同。
uint16_t tem = CalculateCrc16((volatile uint8_t*)&UDP_buff[8],24); UDP_buff[32] = tem << 8; UDP_buff[33] = tem;
看起来这段代码是在计算一段数据的 CRC16 校验码,并将校验码的高8位和低8位分别存储在 UDP_buff 数组的第32个和第33个元素中。其中,CalculateCrc16 函数应该是计算 CRC16 的函数,参数是一个指向数据起始地址的指针,数据长度为24字节。这段代码的目的可能是为了给一段数据添加校验码,以便接收方可以检测数据的完整性和正确性。
阅读全文