2011-08-06 3 views
1

uint64 숫자를 16 진수 형식의 문자열로 가져 오려고했습니다. 그러나 0을 포함해야합니다. 예 :uint64를 (전체) 16 진수 문자열로 변환 C++

uint i = 1; 
std::ostringstream message; 
message << "0x" << std::hex << i << std::dec; 
... 

이 생성됩니다

0x1 

을하지만 내가 원하는 것이 아니다. 내가 원하는 :

0x0000000000000001 

그러나 0이 많은필요합니다.

+0

Ramono : 이것은 언어가 아닌 Visual C++가 아닌 C++입니다. – ybungalobill

답변

5

당신은 IO 조종 사용할 수 있습니다, 당신은 std::cout.setf(std::ios::hex) 등, 예를 들어, 함께 std::cout에 별도의 서식 플래그를 변경할 수 있습니다 또는

#include <iomanip> 
#include <iostream> 

std::cout << std::setw(16) << std::setfill('0') << std::hex << x; 

see here ("Formatting"). 필드 폭은 매번 설정해야하며 다음 출력 조작에만 영향을 미치고 기본값으로 되돌아 가야하므로주의해야합니다.

플랫폼 독립적 인 방식으로 16 진수의 실제 숫자를 얻으려면 sizeof(T) * CHAR_BIT/4 + (sizeof(T)*CHAR_BIT % 4 == 0 ? 0 : 1)setw의 인수로 말할 수 있습니다.

2
message << "0x" << std::setfill('0') << std::setw(12) << std::hex << i << std::dec; 

그리고 Boost을 사용하여 스트림 상태를 저장하고 복원하십시오.

관련 문제