2013-07-29 4 views
1

다음 사항을 고려하십시오 :사용자 정의 표준 : 육각 조작은

unsigned char a(65); 
unsigned char z(90); 

std::cout << std::hex << a << ", " << z <<std::endl; 

출력 :

A, Z 

그러나 원하는 출력은 다음과 같습니다

41, 5a 

는이를 달성하기 위해 이런 식으로 값을 변환하지 않도록하고 싶습니다.

필요에 따라

std::cout << uchar_hex_manip << a << ", " << z << std::endl; 

그래서, 어떻게 'uchar_hex_manip'정의 할 수 있습니다 내 질문 작업 :

std::cout << std::hex << int(a) << ", " << int(z) <<std::endl; 
대신 내가 사전에 포함 할 수있는 몇 가지 마법의 조작이?

업데이트 : 지금까지 모든 의견과 제안을 주셔서 감사하지만 이미 값을 변환하지 않으려 고하고 아무도 그 사실을 완전히 인정하지 않은 것 같습니다. 위에서 언급 한 'a << ", " << z'은 나중에 스트리밍되는 값을 나타냅니다.이 응용 프로그램의 실제 사용 사례는 다양한 이유로 인해 구두가 필요하지 않은 경우보다 복잡한 것입니다 특정 경우에 대한 일부 캐스트에서 발생합니다. 당신이 16 진수로 char을 인쇄하려면

+0

이런 종류의 변환이 많은 이점을 제공한다고 생각하지 마십시오. – billz

+1

자신 만의 조작기를 작성할 수 있습니다. 그러면 ** basic_ostream에서 파생 된 ** your ** 클래스가 반환됩니다. 그 클래스에서'unsigned char'에 대해'operator <<'를 덮어 써서 정수로 출력 할 수 있습니다. 불행히도 지금 예제로 대답으로 쓸 시간이 없습니다. * 그러나 참고 : 가능하기 때문에 ** ** 당신이 이것을해야한다는 것을 의미하지 않는다; ** ** int * 대신 **. * – soon

+0

"값 변환을 피하고 싶다"--- 캐스팅하지 않을 것을 제안합니다. "이 응용 프로그램의 실제 사용 사례는 더 복잡한 무언가가 있다는 것입니다."그러면 잘못된 문제에 대한 해결책을 찾고있을 것입니다. –

답변

1

, 당신은 int로 변환해야합니다

std::cout << std::hex << static_cast<int>('a'); 

트릭을 할해야합니다.

char (또는 unsigned char)이 char 대한 스트림 출력 오퍼레이터가 출력 된 문자를 인쇄하기 위해 정의된다는 점이다의 std::hex 이유는 작동하지 않는다. 이 동작을 변경하는 수식어는 없습니다 (그리고 @soon이 자신의 클래스를 작성하도록 제안 했음에도 불구하고 캐스트를 피하기위한 많은 작업이 필요합니다).

+0

이것은 내가 해결할 해결책이 아닙니다. – Benedict

+0

어쩌면 내 대답이 충분하지 않았을 수도 있습니다. 당신은 그렇게 할 수 없습니다! –