0

基本上我正在尝试将十六进制字符串转换为unsigned long long valuesusing strtoull. 这是简单的代码

#include <stdio.h>
#include <string.h>


int main ()
{
    unsigned long long val =0;

    //printf("sizeof(unsigned long long)=%d\n", sizeof(unsigned long long));

    val = strtoull("0x8004298c42ULL",NULL,16);

    printf("%llx\n", val);

    if ( val == 0x8004298c42ULL)
    {
        printf("Success\n");
    }
    return 0;
}

我希望val打印8004298c42,但它打印4298c42. 8正在被砍掉。我试过没有 the0x和没有 the ULLtoo。但还是一样的结果。为了确保我不会错过一些琐碎printf的格式说明符,我什至检查了val. 仍然没有用(即未打印成功)

我想我错过了一些微不足道的东西,但不知道是什么!

4

1 回答 1

5

该函数strtoull()在 中声明<stdlib.h>,不是<string.h>,因此编译器认为它返回一个int,而不是一个unsigned long long

解决方法:确保所有函数在使用之前都已声明。如果您使用gcc,那么您应该考虑-Wall-Wextra-Wstrict-prototypes-Wmissing-prototypes-Wold-style-declaration-Wold-style-definition的某种组合-Werror

于 2014-11-29T00:57:57.623 回答