> 백엔드 개발 > C++ > 바이트를 인쇄할 때 `printf`가 예기치 않은 16진수 출력을 표시하는 이유는 무엇입니까?

바이트를 인쇄할 때 `printf`가 예기치 않은 16진수 출력을 표시하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-20 13:09:13
원래의
878명이 탐색했습니다.

Why Does `printf` Show Unexpected Hex Output When Printing a Byte?

바이트를 16진수로 인쇄할 때 printf의 예기치 않은 출력 이해

char 요소가 포함된 pixel_data와 같은 벡터 데이터 유형으로 작업할 때 일반적으로 다음이 발생합니다. 16진수 형식으로 단일 바이트를 인쇄하려고 하면 예상치 못한 결과가 발생합니다. 특히 printf(" 0x%1x ", pixel_data[0] )를 사용하여 pixel_data[0]를 인쇄하면 예상되는 0xf5 대신 0xfffffff5가 생성될 수 있습니다.

이 동작은 printf의 특성에서 발생합니다. 여기서 %x 수정자는 부호 없는 정수를 인수로 예상합니다. 결과적으로 varargs 함수에 제공될 때 일반적으로 정수로 승격되는 char 값은 printf에서 int로 처리됩니다.

신뢰할 수 있는 결과를 얻으려면 unsigned int로 명시적으로 캐스팅하는 것이 좋습니다. :

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

또한 필드 너비 1은 표시할 최소 자릿수와 최소 한 자릿수를 지정하므로 이상적이지 않을 수 있습니다. 항상 사용됩니다.

시스템의 char이 부호 있는 유형으로 처리되는 경우 변환으로 인해 음수 char 값에 대해 큰 부호 없는 int 값(예: fffffff5)이 생성될 수 있습니다. 바이트 값이 부호 없는 것으로 처리되도록 하려면 pixel_data에 부호 없는 char을 사용하거나, 부호 없는 char를 통해 캐스팅하거나, 마스킹 작업을 사용하세요.

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

위 내용은 바이트를 인쇄할 때 `printf`가 예기치 않은 16진수 출력을 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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