다음 사항을 고려하십시오 :사용자 정의 표준 : 육각 조작은
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
을 인쇄하려면
이런 종류의 변환이 많은 이점을 제공한다고 생각하지 마십시오. – billz
자신 만의 조작기를 작성할 수 있습니다. 그러면 ** basic_ostream에서 파생 된 ** your ** 클래스가 반환됩니다. 그 클래스에서'unsigned char'에 대해'operator <<'를 덮어 써서 정수로 출력 할 수 있습니다. 불행히도 지금 예제로 대답으로 쓸 시간이 없습니다. * 그러나 참고 : 가능하기 때문에 ** ** 당신이 이것을해야한다는 것을 의미하지 않는다; ** ** int * 대신 **. * – soon
"값 변환을 피하고 싶다"--- 캐스팅하지 않을 것을 제안합니다. "이 응용 프로그램의 실제 사용 사례는 더 복잡한 무언가가 있다는 것입니다."그러면 잘못된 문제에 대한 해결책을 찾고있을 것입니다. –