2013-10-11 6 views
1

Я портирую код C для Android. Я новичок в android. В моем старом коде я определилКак получить значение #define в Android

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

код C является то, что

typedef uint64_t handle; 

Через некоторое расчетное значение ручки печататься с% лу составляет 38654705665 и% 016lx является 0000000900000001.

Но с Android я не могу получить эти значения с тем же кодом. Даже если я попытаюсь напечатать значение B_HANDLE, я не получаю 0x0009. Может кто-нибудь, пожалуйста, помогите мне, как я могу напечатать и получить значения для F. uint64 на андроид

+1

Вам необходимо показать нам код, который не работает. – user694733

+0

Поскольку вы почему-то не добавляете «неправильный» пример кода, моя ставка заключается в том, что 'sizeof (uint64_t)' вашего вручную определенного uint64_t на самом деле составляет 4 байта на 32-битном целевом Android. – keltar

+0

Я работаю на 64-битной машине – user503403

ответ

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 для десятичного знака).

+0

Я переношу существующий код C. Поэтому в основном хочу сделать минимальные изменения. – user503403

+1

Этот существующий код плох и, как вы уже пережили, не переносится. Я указываю вам * * способ, который предвидится стандартом C, чтобы избежать таких проблем. –

Смежные вопросы