#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;
}
//手写函数atoi
//“123”-->0X123
uint64_t atol64( const char *str) //“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 防止数组越界
for( i = 0 ; i < cnt ; i++)
{
temp |= t[j--]<<(i*4); //0X123
}
return temp;
}
int main(int argc,char **argv)
{
printf("******%llx*******\r\n",atol64("10"));
printf("******%lld*******\r\n",atol64("10"));
return 1;
}
完成“123”---》0X123