voidltoh(longlong x,char* p){int div;int cnt =0;if(x ==0){*p ='0';}if(x <0){x =-x;*p ='-';p++;}for(int i =0; x !=0; i++){div = x %16;x = x /16;if((div -10)<0)*(p + i)= div +'0';else*(p + i)='A'+ div -10;div =0;cnt++;}//reverse顛倒for(int i =0; i < cnt /2; i++){char temp = p[i];p[i]= p[cnt -1- i];p[cnt -1- i]= temp;}}intmain(void){char str[]="86281102005404";char strhex[100]={0};longlong data =0;data =my_atoll(str);printf("str=%lld\r\n", data);ltoh(data,strhex);printf("strhex=%s\r\n", strhex);return0;}
my_atoll函數見方案二。 運行結果:
如果比0xFFFF FFFF FFFF FFFF更大的數要轉成十六進制字符串,就不在這里討論了
PS. vc++6.0由于版本過于陳舊,不支持long long,可以改用__int64來定義 報錯:error C2632: ‘long’ followed by ‘long’ is illegal 微軟最終在Visual Studio 2013上增加了對long long和unsigned long long的支持。