实现两个字节序的交换
Posted prayer521
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现两个字节序的交换相关的知识,希望对你有一定的参考价值。
实现两个字节序的交换例如:300=0X012C,交换之后为0X2C01
1 /******************************************************************************* 2 * Function Name : exchangeBytes 3 * Description : 模拟的htons 或者 ntohs,如果系统支字节序更改可直接替换成系统函数 4 * Input : value 5 * Output : None 6 * Return : 更改过字节序的short数值 7 * Attention : None 8 *******************************************************************************/ 9 short exchangeBytes(short value) 10 { 11 short tmp_value; 12 uint8_t *index_1, *index_2; 13 14 index_1 = (uint8_t *)&tmp_value; 15 index_2 = (uint8_t *)&value; 16 17 *index_1 = *(index_2+1); 18 *(index_1+1) = *index_2; 19 20 return tmp_value; 21 }
测试代码
1 #include <stdio.h> 2 typedef unsigned char uint8_t; 3 short exchangeBytes(short value) 4 { 5 short tmp_value; 6 uint8_t *index_1, *index_2; 7 8 index_1 = (uint8_t *)&tmp_value; 9 index_2 = (uint8_t *)&value; 10 11 *index_1 = *(index_2+1); 12 *(index_1+1) = *index_2; 13 14 return tmp_value; 15 } 16 int main(void) 17 { 18 short a=300; 19 short b=0; 20 b=exchangeBytes(300); 21 printf("b=%d\n",b); 22 23 return 0; 24 }
机智云传两个字节类型的温度数据时由于其数据类型定义为:
uint16_t Temperature;
而网络字节序就是大端字节序,MDK中默认的是小端所以须将其转换为大端字节序:ReadTypeDef.Temperature = exchangeBytes(300);
以上是关于实现两个字节序的交换的主要内容,如果未能解决你的问题,请参考以下文章