2017-03-21 11 views
1

나는 메모리라는 큰 배열의 배열을 가지고 있으며, 그 중 8 개를 uint64_t로 변환하려고합니다. 빅 엔디안으로 번호를 인쇄하려고합니다.바이트 배열을 uint64_t로 변환 하시겠습니까?

지금까지이 있습니다

printf("0x%x", value); 

출력은 0x55667788,하지만 난 출력이 0x1122334455667788 할 것을 권장합니다

uint64_t value = (uint64_t)(memory[256]) | //location contains byte 88 
    (uint64_t)(memory[257]) << 8 |   //77 
    (uint64_t)(memory[258]) << 16 |   //66 
    (uint64_t)(memory[259]) << 24 |   //55 
    (uint64_t)(memory[260]) << 32 |   //44 
    (uint64_t)(memory[261]) << 40 |   //33 
    (uint64_t)(memory[262]) << 48 |   //22 
    (uint64_t)(memory[263]) << 56;   //11 

나는과 같이 인쇄 할 수 있습니다.

0x1122334455667788을 인쇄하려면 위 코드를 어떻게 고칠 수 있습니까?

솔루션 : 일 필요가 인쇄 문 :

printf("0x%lx", value); 
+0

컴파일러에서 경고 메시지가 표시됩니까? –

+0

나는 abt 이것을 모른다.. 그러나 나는 유사한 문제를 여기에서 찾아 냈다 ... http://stackoverflow.com/questions/4142251/convert-array-of-8-bytes-to-signed-long-in-c –

+0

나는 하나도 안 먹어. –

답변

0

unsigned long 유형이 시스템에 적어도 64 비트를 가지고 발생하기 때문에 작동 %lx 형식 지정자. C 표준은이를 보장하지 않으며 실제로 64 비트 Microsoft Windows에서 32 비트만을가집니다. unsigned long long 적어도 64 개 비트를 보장, 그래서 당신이 사용할 수 있습니다

printf("0x%llx\n", (unsigned long long)value); 

컴파일러와 C 라이브러리 지원 C99 또는 이후 표준, 당신은 <inttypes.h>에 정의 된 매크로를 사용할 수있는 경우 :

printf("0x%" PRIx64 "\n", value);