2017-03-26 9 views
1

코드는 내가 지금까지이 작업을 수행하기 위해 사용되어왔다 0의 패딩과 최소 길이 (8) 코드를 16 진수로 입력 uint32_t의 변수를 인쇄하는 것이 필요하다 :uint32_t에서 16 진수를 인쇄하는 방법은 무엇입니까? 내가 작업 한

printf("%08lx\n",read_word(address)); 

여기서 read_word는 uint32_t 유형을 반환합니다. jx, llx 등의 포맷을 사용하지 않았지만 사용할 수있는 올바른 포맷이 있습니까?

편집 : 나는 문제를 발견

내가 통과하고있는 무슨에있다. read_word 함수는 uint32_t 벡터에서 값을 반환합니다. 이것이 육각형을 넣을 때 문제가되는 것 같습니다. 이것은 참조/값 문제에 의한 전달이며 수정 사항은 무엇입니까?

read_word 기능 :

uint32_t memory::read_word (uint32_t address) { 
    if(address>(maxWord)){ 
     return 0; 
    } 

    return mem[address]; 

} 

MEM 감속 :

std::vector<uint32_t> mem=decltype(mem)(1024,0); 
+0

[This ''헤더 파일 참조] (http://en.cppreference.com/w/c/types/integer)가 도움이됩니다. 끝에 [포맷 매크로] (http://en.cppreference.com/w/c/types/integer#Format_macro_constants)를 확인하십시오. –

+0

@Someprogrammerdude 감사합니다. 설명서를보고 작동 여부를 확인합니다. PRIx32를 패딩으로 사용하는 방법을 모르십니까? – Dave

+0

형식을 지정하기 만하면됩니다. 차이 없음. –

답변

4

당신이 채우기와 폭 모두 조종 남용 할 필요가 C++에서이 작업을 수행하려면

#include <iostream> 
#include <iomanip> 
#include <cstdint> 

int main() 
{ 
    uint32_t myInt = 123456; 
    std::cout << std::setfill('0') << std::setw(8) << std::hex << myInt << '\n'; 
} 

출력

0001e240 

C는 약간 더 둔감합니다. 당신은 C에서, inttypes.h에서 상수가 필요한 형식 지정자를 형성하기 위해 언어 문자열 연결 기능과 함께 사용하는 것이 inttypes.h

#include <stdio.h> 
#include <stdint.h> 
#include <inttypes.h> 


int main() 
{ 
    uint32_t myInt = 123456; 
    printf("%08" PRIx32 "\n", myInt); 
    return 0; 
} 

출력

0001e240 

주를 사용합니다. 당신은 서문으로 제로 - 필과 최소 길이만을 제공합니다.

+0

'printf ("% 08x \ n", value);''uint32_t value = 0xabcd;','stdio.h'와'stdint.h' 만 포함하면 잘 작동합니다. –

+0

우리는 C++ 버전에서 형식화 된 것으로 보이지만 출력은 여전히 ​​십진수로 나옵니다. 예 : read_word가 값 10 (uint32_t 유형)을 반환하고 C++ 메소드에서 사용되면 '00000010'이 인쇄됩니다. 불행하게도 '0000000a'가 아닙니다. 'myInt' 대신에 cout에 상수를 설정하면 작동합니다. 그래서 아마도 반환 값에 문제가 있습니까? – Dave

+0

매크로가없는 임의의 타입에서 작동하는 추악한 솔루션은'printf ("% 08jx", (uintmax_t) value);' –