2013-10-11 5 views
1

나는 안드로이드 용 C 코드를 포팅 중이다. 나는 안드로이드를 처음 접한다. 가 내 예전의 코드에서 내가 정의한안드로이드에서 #define의 가치를 얻는 방법

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

C 코드 % 루 인쇄 일부 계산 핸들 값은 38,654,705,665이며 %의 016lx가 0000000900000001 후 뭔가

typedef uint64_t handle; 

입니다.

하지만 Android에서는 동일한 코드로이 값을 가져올 수 없습니다. B_HANDLE 값을 인쇄하려고해도 0x0009가 표시되지 않습니다. 어떤 사람은 내가 인쇄 할 수있는 방법을 나에게 도움에 UINT64 forf 값을 얻을시겠습니까 안드로이드이 자신과 같이하지 않을해야

+1

작동하지 않는 코드를 표시해야합니다. – user694733

+0

당신은 어떤 이유로 "잘못된"코드 예제를 추가하지 않으므로 수동으로 정의한 uint64_t의'sizeof (uint64_t)'는 실제로 32 비트 대상인 Android에서 4 바이트입니다. – 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 표준에 의해 예측되는 * 방법을 나타냅니다. –