Следующий код выдает предупреждение при компиляции на 32-битных системах:
1087: warning: integer constant is too large for "long" type
; Как я могу это исправить, чтобы я не получил это предупреждение, и оно работает правильно на 32-разрядных?
Допустимое значение для этого:
unsigned char str[] = "\x00\x17\x7c\x3a\x67\x4e\xcb\x01";
и функция mypow возвращает 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);