zoukankan      html  css  js  c++  java
  • [原创]单片机-HexToStr or HexToAsc

    最近用单片机做个案子

    其中想着把内存中的数据发到电脑的串口调试软件上来,看看数据对不对

    比如单片机中的一个数据

        uint8_t  / Byte / Char  单字节

        uint16_t  / intger  双字节

        uint32   4字节

    我想把它 通过串口 发送到串口调试软件上来

    于是写下了  下面的转换函数

     1 uint8_t uInt_HexToStr(void * pDest,void * pSrc,uint8_t Bytes_Of_Src)
     2 {
     3     uint8_t aHex[4];
     4     uint8_t Tmp;
     5     uint8_t *pDest2;
     6     uint8_t *pSrc2; 
     7     
     8     if ((Bytes_Of_Src==1) || (Bytes_Of_Src==2) ||(Bytes_Of_Src==4))
     9     {    
    10         pDest2 = pDest;    
    11         pSrc2  = pSrc;
    12         
    13         if (Bytes_Of_Src==1)
    14         {
    15             aHex[0] = *pSrc2;  
    16         }
    17         
    18         if (Bytes_Of_Src==2)
    19         {
    20             aHex[0] = *(pSrc2+1);
    21             aHex[1] = *pSrc2;  
    22         }
    23         
    24         if (Bytes_Of_Src==4)
    25         { 
    26             aHex[0] = *(pSrc2+3);
    27             aHex[1] = *(pSrc2+2);        
    28             aHex[2] = *(pSrc2+1);
    29             aHex[3] = *pSrc2;       
    30         }
    31         
    32         Tmp = (aHex[0]&0xf0)>>4;
    33         (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    34         *pDest2=Tmp;
    35                      
    36         Tmp = (aHex[0]&0x0f);
    37         (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    38 
    39         *(pDest2+1)=Tmp;
    40         
    41         
    42         if (Bytes_Of_Src>=2)
    43         {
    44             Tmp = (aHex[1]&0xf0)>>4;
    45             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    46             *(pDest2+2)=Tmp;
    47                          
    48             Tmp = (aHex[1]&0x0f);
    49             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    50             *(pDest2+3)=Tmp;
    51         }
    52         //----------------------------------------------
    53         if (Bytes_Of_Src>=4)
    54         {
    55             Tmp = (aHex[2]&0xf0)>>4;
    56             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    57             *(pDest2+4)=Tmp;
    58                          
    59             Tmp = (aHex[2]&0x0f);
    60             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    61 
    62             *(pDest2+5)=Tmp;
    63             
    64             Tmp = (aHex[3]&0xf0)>>4;
    65             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    66             *(pDest2+6)=Tmp;
    67                          
    68             Tmp = (aHex[3]&0x0f);
    69             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    70             *(pDest2+7)=Tmp;  
    71         } 
    72         
    73         Tmp=1; // 执行完毕     
    74     }
    75     else
    76     {
    77         Tmp=0; // 源数据字节长度不符合要求,只能是2或者4 字节
    78     }
    79     
    80     return Tmp; //返回执行结果:1-正常,0-异常
    81     
    82 }

    以上代码 可以转换单字节   双字节   4字节 ,这个里面还要注意  数据大小端的问题,大家要特别注意一下,不同的单片机或者编译器 都有可能会有 双字节或者 4字节 大小端问题 

    uint8_t Bytes_Of_Src 可以赋值 1 / 2 / 4 代表不同的源数据字节数

    下面是调用函数的例子

    void uUSART_Test(void)
    {
        
        /* 局部变量定义 */
    
        char src[50], dest[50];
        
        uint32_t aaa=0x1234ABCD;  //举例要把这个数据发到电脑上查看
    
        uInt_HexToStr(dest,&aaa,4); // 要转换的数据是4个字节的,转换结果放在dest里面
        
        uUART_PutStr_Len(USART1,(uint8_t * )dest,8);  //发送到电脑上的调试窗口 显示 1234ABCD
    
        uUART_PutStr(USART1,"
    ");
    
        
    
    }

    显示结果

    谢谢大家    留言评论

  • 相关阅读:
    Python – GitHub CentOS
    Python – GitHub Ubuntu
    学习jQuery Treeview一天的感受
    让我郁闷了一个下午的list为null
    在徘徊中前进的一天
    都是被逼的,被逼的
    和技术无关,生活中的一点感受
    我又错了
    忽然的感受
    学习jQuery的一天
  • 原文地址:https://www.cnblogs.com/caohenry999/p/12583728.html
Copyright © 2011-2022 走看看