以下代码是生产时我编译它在32位系统的警告:
1087: warning: integer constant is too large for "long" type; 我怎么能解决这个问题所以我没有得到那个警告,它在32位上运行正常?
有效的输入是:
unsigned char str[] = "\x00\x17\x7c\x3a\x67\x4e\xcb\x01";
Run Code Online (Sandbox Code Playgroud)
并且mypow函数返回unsigned long long.
unsigned long long high, low, nano;
high = // line 1087
(str[7]&0xff) * mypow(2,56) +
(str[6]&0xff) * mypow(2,48) +
(str[5]&0xff) * mypow(2,40) +
(str[4]&0xff) * mypow(2, 32);
low =
(str[3]&0xff) * mypow(2,24) +
(str[2]&0xff) * mypow(2,16) +
(str[1]&0xff) * mypow(2,8) +
(str[0]&0xff);
nano = ((high + low)/10000000) - (unsigned long long)11644473600;
return localtime((time_t*)&nano);
Run Code Online (Sandbox Code Playgroud)
如果在代码中使用的常量不适合32位,请LL在其末尾添加一个常量,以便编译器知道它应该是一个"long long"类型.例如,该nano =行末尾的常量应该是11644473600LL.当前代码将常量强制转换为a long long,但常量本身是常规的,long因为没有明确的LL后缀.