#include <stdio.h>
#include <stdint.h>
//完成'4'-->4 ‘A’-->10
unsigned char G_strTobyte(unsigned char dData)
{
unsigned char rst=0;
if((dData >= '0')&& (dData <= '9'))
rst = dData-'0';
else if((dData >= 'A')&&(dData <= 'F'))
rst = dData+10-'A';
else if((dData >= 'a')&&(dData <= 'f'))
rst = dData+10-'a';
else rst = 0;//不是ASCII的char就返回0 有点儿欠妥!
return rst;
}
//完成num的up次方
uint64_t GPWR(char num,char up)
{
uint64_t data=1;
for(char i=0;i<up;i++)
data *=num;
return data;
}
//手写函数atoi
//“123”-->0X123
uint64_t atol64( const char *str,char type) //“123”
{
//uint8_t 0XFF
//uint16_t 0XFFFF
//uint32_t 0XFFFFFFFF
//uint64_t 0XFFFFFFFFFFFFFFFF
//所以需要数组放置16个char
uint64_t t[16]={0};
uint8_t i=0 , cnt =0 , j =0;
uint64_t temp = 0;
while( *str != '\0')
{
t[cnt++] = G_strTobyte(*str);//1 2 3
str++;
if( cnt > 16)
{
return 0;
}
}
j = cnt -1;//J=2 防止数组越界
if(type==16)//转为16进制
{
for( i = 0 ; i < cnt ; i++)
{
temp |= t[j--]<<(i*4); //0X123
}
return temp;
}
else if(type==10)//转为10进制
{
for( i = 0 ; i < cnt ; i++)
{
temp += t[j--]*GPWR(10,i);
}
return temp;
}
return 0;
}
int main(int argc,char **argv)
{
printf("******%llx*******\r\n",atol64("10",16));
printf("******%lld*******\r\n",atol64("10",16));
printf("******%llx*******\r\n",atol64("10",10));
printf("******%lld*******\r\n",atol64("10",10));
return 1;
}
完成“10” ,16---》0X10
完成“10”,10---》10
******10*******
******16*******
******a*******
******10*******