문자 벡터(pixel_data)로 작업할 때 단일 바이트를 16진수 값으로 인쇄(printf(" 0x) %1x ", pixel_data[0]))이 예기치 않게 4바이트 정수를 생성할 수 있습니다. 의도한 값(0xf5) 대신 (0xfffffff5).
Printf는 일반적으로 %x 수정자에 대해 부호 없는 정수 매개변수를 예상합니다. 그러나 char은 printf와 같은 varargs 함수에 전달되면 int로 승격됩니다. 이 프로모션으로 인해 추가 바이트가 인쇄됩니다.
예측 가능한 결과를 보장하려면 문자를 부호 없는 정수로 명시적으로 캐스트하세요.
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
%1x 필드 너비는 표시할 최소 자릿수를 지정합니다. 그러나 항상 최소한 한 자리 숫자가 필요하므로 이 맥락에서는 유용성이 제한됩니다.
위 내용은 Char 벡터에서 16진수 바이트를 인쇄할 때 `printf`가 예기치 않은 출력을 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!