字符串和整数的转化经常会用到,这里自己做个整理方便回顾
字符串转化为十进制整数
int str_to_dec(char *src)
{
int dec=0;
int temp=0;
while(*src != '\0')
{
temp=*src-48;
dec=dec*10+temp;
src++;
}
return dec;
}
十进制整数转化为字符串
void dec_to_str(int dec,char *obj)
{
char temp[100]={0};
int i,j;
int val1=0;
int val0=0;
val0=dec;
for(i=0;i<100;i++) //将整数转化放进临时数组temp[]中,此时顺序颠倒
{
val1=val0 % 10;
val0=val0 / 10;
temp[i]=val1+48;
if(val0<10)
{
i++;
temp[i]=val0+48;
break;
}
}
for(j=0;j<i;j++) //将临时数组中的字符串变换顺序后放到目标数组中
{
obj[j]=temp[i-j];
}
obj[j]='\0';
}
字符串转化为十六进制整数
uint64_t str_to_hex(const char* src)
{
uint64_t u64Result = 0;
if (NULL == src)
return 0;
if (!strncasecmp(src, "0x", 2)) //strncasecmp(str1,str2,n)函数为将str1与str2的前n位进
str += 2; //行比较,相等则返回0<字符大写与小写视为相同字符>
while (*src) {
if (*src >= '0' && *src <= '9')
u64Result = (u64Result << 4) + *src - '0';
else if (*src >= 'a' && *src <= 'f')
u64Result = (u64Result << 4) + *src - 'a' + 10;
else if (*src >= 'A' && *src <= 'F')
u64Result = (u64Result << 4) + *src - 'A' + 10;
else
{
return 0;
}
src++;
}
return u64Result;
}
十六进制整数转化为字符串
void hex_to_str(uint64_t u64number, char *str, int len)
{
uint8_t temp = 0;
uint8_t i = 0, j = 0;
if (!str || !u64number) return;
while (u64number)
{
temp = u64number % 0x10;
if (temp >= 0 && temp <= 9)
{
str[i] = temp + '0';
}
else if (temp >= 0xa && temp <= 0xf)
{
str[i] = temp - 10 + 'a';
}
i++;
if (i >= len) return;
u64number >>= 4;
}
/* swap */
for (i--; j < i; j++, i--)
{
temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}