C/C++ —— 十六进制类型字符串的转换

    在实际工作中,字符串和其它数据类型的转换是很常见的,库函数有很多,比如 atoi , strtol ,sscanf 等,这些函数网上有很多资料,

我经常用到的就是十六进制的数值以字符串的形式传输,然后又要解析,这里记录一下我这边的做法:

将2个字节的十六进制的字符串转成short int 2个字节的整形数据: 


                                                                  撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/39054969

 

short int xstrtoshortint(char *str)
{       
//int len=strlen(str);
    short int ivalue = 0;   //这里转换为2个字节的整形数

    if((len/2)>sizeof(ivalue))
    {
        printf("left overflow \n");//会左溢出
    }
    int ioffset = 0;  //移位
    char *ptr; //字符指针
    ptr = str; //从头开始
    while (*ptr != '\0')  //到最后为字符串结束符
    {
        ivalue = ivalue << ioffset; //第一次不移位,之后每次左移4bit,十六进制一个字符代表4bit
        if ((*ptr <= '9' && *ptr >= '0'))
        {
            ivalue = ivalue + (*ptr - '0');//ASCALL 码相减
        }
        else if ((*ptr >= 'a' && *ptr <= 'f'))
        {
            ivalue = ivalue + (*ptr - 'a') + 10;
        }
        else if ((*ptr >= 'A' && *ptr <= 'F'))
        {
            ivalue = ivalue + (*ptr - 'A') + 10;
        }   // 给ivalue低位4bit 赋值
        ptr++;
        ioffset = 4;
    }
    return ivalue;
}


也可以这样,原理是一样的,只是换一种方式:


short int xstrtoshortint(char *str)
{
    int len = strlen(str);
    short int ivalue = 0;
    for (int i = 0; i < len; i++)
    {
        if ((str[i] <= '9' && str[i] >= '0'))
        {
            ivalue = ivalue * 16 + (str[i] - '0'); //16进制 可换其它进制
        }
        else if ((str[i] >= 'a' && str[i] <= 'f'))
        {
            ivalue = ivalue * 16 + (str[i] - 'a') + 10;
        }
        else if ((str[i] >= 'A' && str[i] <= 'F'))
        {
            ivalue = ivalue * 16 + (str[i] - 'A') + 10;
        }

    }
    return ivalue;
}



比如 调用xstrtoshortint("1A4e"),可以得到一个 0x1A4e 的short int 数据, 如果要转其它数据类型,原理相似!

转字符串的话,sprintf函数是最常用的!





评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值