基本上我正在尝试使用unsigned long long values
将十六进制字符串转换为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
被切断了。我试过没有0x
而没有ULL
。但结果仍然相同。为了确保我没有错过一些简单的printf
格式说明符,我甚至检查了val
的内容。仍然没有用(即没有打印成功)
我想我错过了一些微不足道的事情,但不知道是什么!
答案 0 :(得分:5)
函数strtoull()
在<stdlib.h>
中声明,而不是<string.h>
,因此编译器认为它返回int
,而不是unsigned long long
。
治愈:确保在使用之前声明所有函数。如果您使用gcc
,则应考虑-Wall
,-Wextra
,-Wstrict-prototypes
,-Wmissing-prototypes
,-Wold-style-declaration
,{{1}的某种组合}和-Wold-style-definition
。