前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进制转换-不同位数的数据相互转换(C/C++实现)

进制转换-不同位数的数据相互转换(C/C++实现)

作者头像
跋扈洋
发布2022-12-03 09:32:04
7110
发布2022-12-03 09:32:04
举报
文章被收录于专栏:物联网知识物联网知识

引言

无论是在纯软件开发还是嵌入式开发,进制转换都是必不可少的程序。尤其对于嵌入式开发,因为数据和地址的频繁使用,进制转换的使用频率非常高。比如常用的32位数据分成两个16位数据,2个八位数据转成一个16位数据等。本文基于C/C++来编写程序,实现我们常用的几个进制转换功能。

功能设计

  1. 32位数据转成2个16位数据
  2. 16位数据转成2个8位数据
  3. 2个16位数据转成1个32位数据
  4. 2个8位数据转成1个16位数据
  5. 32位数据转成4个8位数据
  6. 4个8位数据转成1个32位数据

准备工作

  1. 下载VSCode
  2. 下载MinGW编译器
  3. VSCode 配置C/C++环境

软件实现

32位数据转成2个16位数据

32位数据拆分成两个16位数据,其实就是将32位数据的高16位和低16位数据分别赋值给两个16位数据。

代码语言:javascript
复制
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位数据

代码语言:javascript
复制
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位数据

代码语言:javascript
复制
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位数据

代码语言:javascript
复制
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位数据

代码语言:javascript
复制
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位数据

代码语言:javascript
复制
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;}

调试程序

代码语言:javascript
复制
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;}

调试结果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 功能设计
  • 准备工作
  • 软件实现
    • 32位数据转成2个16位数据
      • 16位数据转成2个8位数据
        • 2个16位数据转成1个32位数据
          • 2个8位数据转成1个16位数据
            • 32位数据转成4个8位数据
              • 4个8位数据转成1个32位数据
                • 调试程序
                  • 调试结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档