类型定义无符号长长IMSI;
imsi;
当我尝试使用%llu作为格式说明符来打印它时,我得到了一个相当不相关的值。
我可以做些什么来消除这个问题?
我也在使用gcc 4.3.3,虽然我一直使用的跟踪机制可能有问题,但即使使用printf,我也遇到了同样的问题。
imsiAsInt = 9379666465 ;
brrm_trace(ubm_TRACE_BRRM_UECTRL,ubm_TRACE_INFO,
UEC_IUH_ACCACHE_ENTRY_FOUND,imsiAsInt, status.ueRegCause,
mCacheEntries.size());
printf("printf:UEC_IUH_ACCACHE_ENTRY_FOUND=%llu, sizeof(IMSI)=%d\n",
imsiAsInt,sizeof(IMSI));当使用printf时,这会给出以下输出UEC_IUH_ACCACHE_ENTRY_FOUND Imsi=789731873,UeRegCause=1,CurSize=5 --> printf:UEC_IUH_ACCACHE_ENTRY_FOUND=789731873,sizeof(IMSI)=8 ->
另外,对于7位数中较小的值,我没有得到任何问题。
发布于 2010-04-27 20:02:12
您使用的是哪种编译器?下面的程序
#include <stdio.h>
int main()
{
unsigned long long x;
x = 12345;
printf("Value: %llu\n", x);
x = -1;
printf("Value: %llu\n", x);
return 0;
}确实给出了预期的输出:
Value: 12345
Value: 18446744073709551615在Linux上使用gcc 4.4.3
发布于 2010-04-27 20:47:10
这可能是一个问题:
imsiAsInt = 9379666465 ;
[Warning] integer constant is too large for 'long' type 试试9379666465ll
发布于 2010-04-27 20:00:05
你没有说你使用的是什么操作系统或编译器,也没有发布代码,所以给出一个正确的答案并不容易。不过,我将尝试一下,并猜测您正在使用的MSVC旧版本不支持long long的标准printf格式说明符,因此您可能不得不使用微软的非标准%Lu替代方案来获得所需的结果。
为了将来的参考,你应该发布你的代码,并给出足够的细节让人们回答,例如,你使用的是什么操作系统和编译器。正如其他人所指出的那样,你也应该对你的接受率做些什么。
https://stackoverflow.com/questions/2720858
复制相似问题