在ARM交叉编译器中使用unsigned long long
该变量表示分区大小(~256GBytes)。我希望它存储为64位,但在使用%lld
打印时,或者甚至尝试将其打印为Mega字节(value/(1024*1024*1024))
时,我总是看到实际值的唯一32位。
有谁知道为什么编译器将它存储为32位?
我的错误,使用以下计算在C中设置值:
partition_size = st.f_bsize*st.f_frsize;
struct statvfs { unsigned long int f_bsize; unsigned long int f_frsize; ...}
问题是f_bsize
和f_frsize
只有32位,编译器不会自动将它们转换为64位! Casting为我解决了这个问题。
答案 0 :(得分:2)
我的错误........ 使用以下计算在C中设置该值:
partition_size = st.f_bsize * st.f_frsize;
struct statvfs {unsigned long int f_bsize; unsigned long int f_frsize; ...}
问题是f_bsize& f_frsize只有32位,编译器不会自动将它们转换为64位!
Casting为我解决了这个问题。
答案 1 :(得分:1)
以下代码打印整个64位。尝试使用%llu
main()
{
unsigned long long num = 4611111275421987987;
printf("%llu\n",num);
}