【转】有关__int64类型的打印问题

来源:互联网 发布:泉州广电网络 电话 编辑:程序博客网 时间:2024/05/17 20:31

#include <stdio.h>
#include <basetsd.h>/* required typedef __int64 for gcc */

 

typedef char TCHAR;

 

#define TEXT(x) x


unsigned __int64 atou64(const TCHAR *s) ;

 

 

int main()
{
    unsigned __int64 value;
    TCHAR *test = "1234567890123456789";


    printf("in main(): test = <%s>/n", test);
    printf("sizeof(__int64) = %d/n", sizeof(__int64));
    value = atou64(test);


    printf("value using I64d: %I64d/n", value); /* for Borland BCC or Microsoft VC++ */
    printf("value using Ld:   %Ld/n", value); /* for Borland BCC */
    printf("value using lld:  %lld/n", value); /* for gcc */


    printf("value using I64x: %016I64x(hex)/n", value);/* for Borland BCC or Microsoft VC++ */
    printf("value using Lx:   %016Lx(hex)/n", value);/* for Borland BCC */
    printf("value using llx:  %016llx(hex)/n", value); /* for gcc */
    return 0;
}

 

unsigned __int64 atou64(const TCHAR *s)
{
    const unsigned __int64 max64 = (unsigned __int64)0-1;
    unsigned __int64 v = 0;
    int digit;


    while (*s>=TEXT('0') && *s<=TEXT('9'))
   {
         digit = *s++ - TEXT('0');
         if (v > (max64-digit)/10)
             return 0; /* overflow */
         v = 10*v + digit;
    }


    return v;
}