printf 16진수 인쇄 동작 이해
printf를 사용하여 문자의 16진수 표현을 인쇄할 때 문자가 없이 전달되면 예기치 않은 결과가 발생할 수 있습니다. 명시적 캐스팅. 이는 %x 수정자에 대해 부호 없는 int 매개변수를 기대하는 printf의 동작 때문입니다.
Char 승격 및 정의되지 않은 동작
C에서는 문자(char )는 일반적으로 printf와 같은 varargs 함수 내에서 int로 승격됩니다. 그러나 int의 크기는 플랫폼마다 다르므로 문자가 명시적으로 캐스팅되지 않으면 잠재적으로 정의되지 않은 동작이 발생할 수 있습니다.
예측 가능한 결과를 위한 명시적 캐스팅
예측 가능한 결과를 보장하려면 , 인쇄하기 전에 char을 unsigned int로 명시적으로 캐스팅합니다. 이렇게 하면 예상치 못한 동작을 방지하고 올바른 16진수 표현을 표시할 수 있습니다.
printf(" 0x%1x ", (unsigned)pixel_data[0] );
필드 너비 고려 사항
16진수 인쇄에 대해 필드 너비를 1로 설정하는 것은 특별히 중요하지 않습니다. 표시할 최소 자릿수를 지정하고 항상 하나 이상의 자릿수가 표시되므로 유용합니다.
서명되지 않은 문자 처리
플랫폼의 문자가 서명된 경우 적절하게 처리하는 것이 중요합니다. 음수 char 값을 큰 unsigned int 값으로 변환하지 않으려면 unsigned char을 사용하거나 unsigned char 또는 마스킹 작업을 사용하여 값을 명시적으로 캐스팅하는 것이 좋습니다.
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0] );
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU );
위 내용은 문자를 인쇄할 때 `printf`가 예기치 않은 16진수 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!