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 중국어 웹사이트의 기타 관련 기사를 참조하세요!