进制转换-不同位数的数据相互转换(C/C++实现)
Posted 跋扈洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进制转换-不同位数的数据相互转换(C/C++实现)相关的知识,希望对你有一定的参考价值。
进制转换-不同位数的数据相互转换(C/C++实现)
引言
无论是在纯软件开发还是嵌入式开发,进制转换都是必不可少的程序。尤其对于嵌入式开发,因为数据和地址的频繁使用,进制转换的使用频率非常高。比如常用的32位数据分成两个16位数据,2个八位数据转成一个16位数据等。本文基于C/C++来编写程序,实现我们常用的几个进制转换功能。
功能设计
- 32位数据转成2个16位数据
- 16位数据转成2个8位数据
- 2个16位数据转成1个32位数据
- 2个8位数据转成1个16位数据
- 32位数据转成4个8位数据
- 4个8位数据转成1个32位数据
准备工作
软件实现
32位数据转成2个16位数据
32位数据拆分成两个16位数据,其实就是将32位数据的高16位和低16位数据分别赋值给两个16位数据。
struct multiple_data u32_turn_Two_HEX(uint32_t DATA)
struct multiple_data DATAHEX;
DATAHEX.hex_DATA1=(DATA>>16) & 0XFFFF; //高16位
DATAHEX.hex_DATA2=DATA & 0XFFFF; //低16位
return DATAHEX;
这个程序很好理解,就是将32位数据的高16位左移16位,此时数据应该从0x **** ****编程0x0000 ****。之后再将此值赋给一个16位数据即可。低位直接与0xFFFF后赋值给一个16位数据。
16位数据转成2个8位数据
struct multiple_data HEX_turn_Two_OCT(uint16_t DATA)
struct multiple_data DATAOCT;
DATAOCT.OCT_DATA1=(DATA>>8) & 0XFF; //高8位
DATAOCT.OCT_DATA2=DATA & 0XFF; //低8位
return DATAOCT;
2个16位数据转成1个32位数据
uint32_t Two_HEX_turn_32(uint16_t DATA1,uint16_t DATA2)
uint32_t DATA_32;
DATA_32=(DATA1<<16)|DATA2;//DATA1在高位,DATA2在低位
return DATA_32;
2个8位数据转成1个16位数据
uint16_t Two_OCT_turn_HEX(uint8_t DATA1,uint8_t DATA2)
uint32_t DATA_16;
DATA_16=(DATA1<<8)|DATA2;//DATA1在高位,DATA2在低位
return DATA_16;
32位数据转成4个8位数据
struct multiple_data u32_turn_four_OCT(uint32_t DATA)
struct multiple_data DATAOCT;
DATAOCT.OCT_DATA1=(DATA>>24) & 0XFF; //高8位
DATAOCT.OCT_DATA2=(DATA>>16) & 0XFF;
DATAOCT.OCT_DATA3=(DATA>>8) & 0XFF;
DATAOCT.OCT_DATA4=DATA & 0XFF; //低8位
return DATAOCT;
4个8位数据转成1个32位数据
uint32_t four_OCT_turn_32(uint8_t DATA1,uint8_t DATA2,uint8_t DATA3,uint8_t DATA4)
uint32_t DATA_32;
DATA_32=(DATA1<<24)|(DATA2<<16)|(DATA3<<8)|(DATA4);//DATA_32=[DATA1][DATA2][DATA3][DATA4]
return DATA_32;
调试程序
int main()
uint32_t u32=0x6789ABCD,a32,b32;
uint16_t u16=0x89AB, a16,b16=0x1234;
uint8_t u8=0x12,a8,b8=0x34,c8=0x56,d8=0x78;
printf("This is a program of Hexadecimal conversion.\\n\\n");
multiple_data DATAP;
DATAP=u32_turn_Two_HEX(u32);
printf("The following is the conversion of 32-bit data into two hex data.\\n");
printf("32-bit:0x%x=>hex1:0x%x,hex2:0x%x\\n\\n",u32,DATAP.hex_DATA1,DATAP.hex_DATA2);
DATAP=HEX_turn_Two_OCT(u16);
printf("The following is the conversion of hex data into two OCT data.\\n");
printf("hex:0x%x=>oct1:0x%x,oct2:0x%x\\n\\n",u16,DATAP.OCT_DATA1,DATAP.OCT_DATA2);
a32=Two_HEX_turn_32(u16,b16);
printf("The following is the conversion of two HEX into 32-bit data.\\n");
printf("hex1:0x%x, hex2:0x%x =>32-bit:0x%x\\n\\n",u16,b16,a32);
a16=Two_OCT_turn_HEX(u8,b8);
printf("The following is the conversion of two OCT into HEX data.\\n");
printf("OCT1:0x%x,OCT2:0x%x =>hex:0x%x\\n\\n",u8,b8,a16);
DATAP=u32_turn_four_OCT(u32);
printf("The following is the conversion of 32-bit into four OCT.\\n");
printf("32-bit:0x%x=>OCT1:0x%x,OCT2:0x%x,OCT3:0x%x,OCT4:0x%x\\n\\n",u32,DATAP.OCT_DATA1,DATAP.OCT_DATA2,DATAP.OCT_DATA3,DATAP.OCT_DATA4);
b32=four_OCT_turn_32(u8,b8,c8,d8);
printf("The following is the conversion of four OCT into 32-bit.\\n");
printf("OCT1:0x%x,OCT2:0x%x,OCT3:0x%x,OCT4:0x%x==>32-bit:0x%x\\n",u8,b8,c8,d8,b32);
system("pause");
return 0;
调试结果
后续
完成程序和工程可以直接下载【https://download.csdn.net/download/qq_44629109/85963485】,或者在公众号:物联网知识上,输入《进制转换-不同位数的数据相互转换》获取百度网盘链接。
如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏。
或者关注公众号观看更多。
编写不易,感谢支持。
以上是关于进制转换-不同位数的数据相互转换(C/C++实现)的主要内容,如果未能解决你的问题,请参考以下文章