实现两个字节序的交换

实现两个字节序的交换例如: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);

时间: 2024-12-29 05:23:27

实现两个字节序的交换的相关文章

字节序详解

一.字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了). 其实大部分人在实际的开发中都很少会直接和字节序打交道.唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题. 在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian.引用标准的Big-Endian和Little-Endian的定义如下: a) Little-Endian就是低位字节排放在内存的低地址端,高位

字节序的理解----C语言和Python语言

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序.常见的主要有以下2种: 小端序(Little-Endian):低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端.最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位.该序因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位,反之,高位值就应该放在内存地址大的地方,也即内存地址高位.在80X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端法. 大端序(B

网络字节序和主机字节序

1.大端.小端字节序 考虑一个16位整数,它由2个字节组成.内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序:另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序.如下所示: 术语“大端”和“小端”表示多个字节值的哪一端(小端或大端)存储在该值的起始地址. 遗憾的是,这两种字节序之间没有标准可循,两种格式都有系统使用.比如,Inter x86.ARM核采用的是小端模式,Power PC.MIPS UNIX和H

【转】[c/c++ ]字节序与大小端转换--不错

原文网址:http://blog.csdn.net/kuai0705/article/details/20841133 注明: 以下内容均为学习内容整理,记录,便于自己学习,并非完全意义上的自产,如有感到不适,请联系我 一.多字节值及字节序 1.brief 现在有一个数字 65430,这个数字在二进制的内存中一个字节无法完全存下,存储这个数字需要1个字节以上的空间.这样的值被称为多字节量(multi-byte quantity). 65430在内存中由两个字节表示:0xFF 和 0x96 ,其中

linux: 讨论一下网络字节序--------大端与小端的差别

数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式).内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式.内存的高地址存储数据的低字节,低地址存储数据高字节的方式称为大端模式. eg:对于内存中存放的数0x12345678来说(注意,对于数据而言,此处12是高字节,78是低字节:对于地址而言,左边是低地址,右边是高地址) 如果是采用大端模式存放的,则其真实的数是:0x12345678 如果是采用小端模式存放的,则其

刨根究底字符编码之九——字符编码方案的演变与字节序

字符编码方案的演变与字节序 一.字符编码方案的演变 1. 前文已经提及,编号字符集CCS(简称字符集)与字符编码方式CEF(简称编码方式)这两个概念,在早期并没有必要严格区分. 在Unicode编码方案出现之前,字符集及其具体的编码方式是绑定耦合在一起的,因此,"字符集"."编码"或"编码方式"甚至"编码方案"这几个概念经常相互指代.彼此混用. 比如,字符集里的字符编号(即码点编号)在很多文章里也称之为字符编码.字符码.码点.

字节序与字节对齐

一.网络字节序与主机字节序 1.大端和小端存储大端(Big Endian):高位存低地址.符合人类的正常思维.网络字节序采用大端(网络传输的是字节流). 小端(Littile Endian):低位存低地址. 如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示.---------------------------地址偏移 大端模式 小端模式0x00      12     780x01      34     560

一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧

[C++][转]CPU字节序 网络序 主机序 大端小端

原帖:http://www.cnblogs.com/darktime/p/3298075.html 不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址 LE little-endian最符合人的思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也