[英]How to get lower and higher 32 bits of a 64-bit integer for gcc inline asm? (ARMV5 platform)
[英]How to print 64-bit integer in GCC 4.4.1?
我在 GCC 4.4.1 中使用Code::Blocks ,但我似乎无法从我的 C 代码中打印 64 位有符号整数。
这段代码:
long long longint;
longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8); /* Correct */
printf("%llx\n", longint); /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint); /* Correct */
printf("%lld\n", longint); /* Incorrect */
产生输出:
Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193
64 位算术似乎工作正常:
longint -= 0x1000000000000000;
printf("%x%x\n", *(((int*)(&longint))+1), longint);
给出:
bcdefabcdefcdef
我错过了什么吗?
看看%I64d
对你有帮助。 %lld
适用于long long int
但有时在 Windows IDE 上情况会变得非常不同
要(在 C99 及更高版本中)可移植地打印 64 位整数,您应该#include <inttypes.h>
并使用 C99 宏PRIx64
和PRId64
。 那会让你的代码;
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);
printf("%" PRIx64 "\n", longint);
printf("%" PRId64 "\n", longint);
编辑:有关更多示例,请参阅此问题。
这取决于操作系统。 如果您在几乎任何使用 GLIBC 的 GCC 上执行此操作,那么 %llx 就可以工作。
但是,如果您使用的是 mingw 编译器,那么这将使用 Microsoft 库,您需要查看他们的文档。
这会将您的程序更改为:
longint = 0x1BCDEFABCDEFCDEFLL; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8); /* Correct */
printf("%I64x\n", longint); /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint); /* Correct */
printf("%I64d\n", longint);
longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */ 您可以打印为-
printf("%llx", longint);
终于明白了:
longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("%I64d\n", longint);
printf("%I64x\n", longint);
印刷:
2003520930423229935
1bcdefabcdefcdef
谢谢@npclaudiu!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.