> 백엔드 개발 > C++ > printf를 사용하여 단일 바이트의 16진수 값을 어떻게 정확하게 인쇄할 수 있습니까?

printf를 사용하여 단일 바이트의 16진수 값을 어떻게 정확하게 인쇄할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-16 18:08:13
원래의
693명이 탐색했습니다.

How Can I Accurately Print Hexadecimal Values of Single Bytes Using printf?

printf: 16진수 값을 정확하게 인쇄

문자 벡터로 작업할 때 개별 바이트를 16진수로 인쇄할 때 불일치가 발생하는 것이 일반적입니다. printf를 사용하여 형식을 지정합니다. 이 문제는 1바이트에 불과한 단일 문자를 인쇄하려고 시도했지만 대신 다중 바이트 값을 얻을 때 발생합니다.

이 동작의 원인은 printf의 유형 일치에 있습니다. %x 수정자는 unsigned int 매개변수를 기대하며, char는 일반적으로 가변 인수 함수에 전달될 때 int로 승격됩니다. 이 프로모션으로 인해 단일 문자 값을 인쇄할 때 잘못된 결과가 발생할 수 있습니다.

이 문제를 해결하려면 예측 가능한 결과를 보장하기 위해 문자를 unsigned int로 명시적으로 캐스팅해야 합니다. 예를 들어, 다음 코드는 단일 바이트를 정확하게 인쇄합니다.

printf(" 0x%1x ", (unsigned)pixel_data[0]);
로그인 후 복사

단순히 최소 자릿수를 지정하기 때문에 필드 너비 1은 이 맥락에서 특별히 유용하지 않다는 점에 유의하는 것이 중요합니다. 표시합니다. 그러나 바이트 값을 부호 없는 값으로 처리하고 부호 없는 int로 변환할 때 0 확장하려면 벡터에 부호 없는 char을 사용하거나 특정 형변환을 수행할 수 있습니다.

printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
로그인 후 복사

또는 다음과 같이 할 수 있습니다. 승격 후 마스킹 작업을 적용하여 동일한 결과를 얻습니다.

printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
로그인 후 복사

이러한 기술을 따르면 printf를 정확하게 수행할 수 있습니다. 단일 바이트를 처리하는 경우에도 16진수 값을 인쇄합니다.

위 내용은 printf를 사용하여 단일 바이트의 16진수 값을 어떻게 정확하게 인쇄할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿