2个8位数据和一个16位数据相互转换
首先先了解一下bit和Byte,俗称大B和小b的区别。
一个小b只能代表一个内容(0或者1,其中的一个)
两个小b可代表4个内容 “2的2次方“ (00,11,01,10)
bit意为“位”或“比特”,是计算机运算的基础;
Byte意为“字节”,是计算机文件大小的基本计算单位;
换算关系:
1Byte = 8bits
2个8位数据high、low合成一个16位数据s:
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
// printf("\r\n您发送的消息为:\r\n\r\n");
// if((USART_RX_BUF[0]==0xAA)&&(USART_RX_BUF[1]==0xAA)&&(USART_RX_BUF[4]==0xBB)&&(USART_RX_BUF[5]==0xBB))
// {
//s = (short) (high << 8) | low; //java short是两个字节
//high = (s >> 8) & 0xff; //高8位
//low = s & 0xff; //低8位
TEXT_Buffer[0]=(USART_RX_BUF[0]<<8)|USART_RX_BUF[1];
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);
USART_RX_STA2=0;
// }
一个16位数据s拆分成2个8位数据high、low:
addr = (u16)obj_addr;//目标地址
chn = (u16)obj_chn;//目标信道
// local_addr=(u16)obj_local_addt;//本地地址
USART_RX_BUF_add_cnn[i++] =(addr>>8)&0xff;//高位地址 0
USART_RX_BUF_add_cnn[i++] = addr&0xff;//低位地址 1
USART_RX_BUF_add_cnn[i++] = chn;//无线信道 0x01
USART_RX_BUF_add_cnn[i++] =(obj_local_addt[0]>>8)&0xff;//高位地址 0 本地ID地址
USART_RX_BUF_add_cnn[i++] = obj_local_addt[0];//低位地址 1 本地ID地址
flag++;
}