1

我正在为 android 移植一些 C 代码。我是安卓新手。在我定义的旧代码中

typedef unsigned long uint64_t
typedef unsigned int      uint32_t;
#define A_HANDLE                0x0007LL
#define B_HANDLE                0x0009LL

C代码是什么

typedef uint64_t handle;

经过一些计算,使用 %lu 打印的句柄值是 38654705665 和 %016lx 是 0000000900000001 。

但是对于 Android,我无法使用相同的代码获取这些值。即使我尝试打印 B_HANDLE 的值,我也没有得到 0x0009。有人可以帮助我如何在android上打印并获取uint64的值

4

1 回答 1

2

你不应该自己做这样的事情:

typedef unsigned long uint64_t;
typedef unsigned int uint32_t;

这些由 C 保留,包括<stdint.h>应该为您提供正确typedef的平台。

那么你应该使用

#include <stdint.h>
#define A_HANDLE                UINT64_C(0x0007)
#define B_HANDLE                UINT64_C(0x0009)

使常数具有正确的长度说明符。(您的值已签名,而不是未签名,而long long不是long。)

通过包含第二个标准标题,使用正确的格式说明符打印此类值

#include <inttypes.h>
printf("valuue is %" PRIX64 "\n", handle);

或等效(PRIu64对于十进制无符号)。

于 2013-10-11T07:05:42.243 回答