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
");//会左溢出
}
int ioffset = 0; //移位
char *ptr; //字符指针
ptr = str; //从头开始
while (*ptr != " ") //到最后为字符串结束符
{
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函数是最常用的!
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
