数据类型转换与进制转换(hex转str,str转hex/ASCII,str转float/int,float/int转str,进制转换等)——C语言篇

理清楚数据类型转换,还是要回归ASCII码、

引用一下的ASCII表http://ascii.911cha.com/方便对比学习。在单片机中其实是自动识别十进制与十六进制的,但是有时候需要对数据转换获取想要的进制数。下面介绍几种数据类型的转换,此外方法很多,只简单介绍本人愚见。

一、字符串转ASCII

字符串其实就是上述ASCII表中的图形栏内容,转换成hex,即变成对应的十六进制数。通常以0123456789ABCDEF,进行转换。找规律:字符 '0'  对应0x30 字符 '1'  对应0x31   字符‘A’  对应0x41   字符 ‘a’对应 0x61 等这些都是简单,早就知道的。换成C语言则可以这样写:

‘0~9‘  + 0x30  

‘A~F’   - 'A'+10

'a~f'   - 'a'+10

void str_to_acsll(uint8_t  *s_inchar, uint8_t s_len, uint8_t  *a_outtxt)
{

    uint8_t size1=0,i=0;
         for( size1=0;size1<s_len; size1++)
        {
            
            if(    s_inchar[size1]>='0' && s_inchar[size1] <= '9')
            {
                a_outtxt[size1] = s_inchar[size1] - 0x30;
            }
            else if(    s_inchar[size1]>='A' && s_inchar[size1] <= 'F')
            {
                a_outtxt[size1] = s_inchar[size1] - 'A'+10;
            }
            else if(    s_inchar[size1]>='a' && s_inchar[size1] <= 'f')
            {
                a_outtxt[size1] = s_inchar[size1] - 'a'+10;
            }

        }
     for( size1=0,i=0;size1<=s_len; size1++,i++)
     {
            a_outtxt[i]=(a_outtxt[size1]<<4)|a_outtxt[++size1];            
     }
      a_outtxt[i] = '\0'; 
}

二、字符串转hex

这个是用于把字符串占两个字节的,合成为一个hex使用。比如:“FF”   ->  0xff  字符串占用的是两个字节的数其实是一个hex的,那么就要位移合成。

uint16_t stringtohex(uint8_t *buf, uint8_t * format, uint16_t us_length)
{
    uint8_t tempcode;
    uint16_t uslength = us_length * 2,us_count = 0,us_data;

    for(us_data = 0;us_count < uslength; us_count += 2,us_data++)
    {
        tempcode = format[us_data] >> 4;

        if(tempcode <= 9)
        {
            buf[us_count] = tempcode + '0';
        }
        else
        {
            buf[us_count] = tempcode - 10 + 'A';
        }
        tempcode = format[us_data] & 0X0F;
        if(tempcode <= 9)
        {
            buf[us_count+1] = tempcode + '0';
        }
        else
        {
            buf[us_count+1] = tempcode - 0X0A + 'A';
        }
    }
    buf[uslength] = '\0';
    return uslength;
}

三、float 转hex

 

union valReg
{

char  onenet_data[4];
float onenet_float;

};
union valReg onenet_val;

///float数据大小端的问题,低字节在后,高字节在前

int test()

{

float  test_f=3.14;

uint8_t test_i8[4];

onenet_val.onenet_float=test_f;

test_i8[....]=onenet_val.onenet_data[...];即转换完成

 

}

4.      C标准库的使用

 sprintf((char *)srtbuf,"%d   %f    %s  ",  i8,float,buf  );                 

   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值