programing

16진수를 인쇄할 때 printf가 1바이트만 출력하지 않는 이유는 무엇입니까?

javamemo 2023. 7. 19. 21:01
반응형

16진수를 인쇄할 때 printf가 1바이트만 출력하지 않는 이유는 무엇입니까?

pixel_data이다.vectorchar.

내가 할 때printf(" 0x%1x ", pixel_data[0] )만나 뵙기를0xf5.

하지만 나는 이해합니다.0xfffffff5마치 1바이트가 아닌 4바이트 정수를 출력하는 것처럼.

왜 이러한가?준 적이 있습니다printf a char출력하려면 - 1바이트밖에 안 되는데, 왜 그럴까요?printf인쇄 4?

NB. 그printf구현은 타사 API 내에서 마무리되지만 이것이 표준의 기능인지 궁금할 뿐입니다.printf?

당신은 아마도 정의되지 않은 행동의 양성 형태를 얻고 있을 것입니다. 왜냐하면%x수식어는 다음을 기대합니다.unsigned int매개 변수 및 achar일반적으로 a로 승진할 것입니다.int변수 함수로 전달될 때.

당신은 명시적으로 캐릭터를 캐스팅해야 합니다.unsigned int예측 가능한 결과를 얻는 방법:

printf(" 0x%1x ", (unsigned)pixel_data[0] );

1의 필드 너비는 그다지 유용하지 않습니다.표시할 최소 자리 수만 지정하며, 어떤 경우에도 최소 한 자리 이상이 필요합니다.

한다면char플랫폼에서 서명되면 이 변환은 음수로 변환됩니다.char큰 값unsigned int값(예:fffffff5) 바이트 값을 부호 없는 값으로 처리하고 변환할 때 0만 확장하려면unsigned int사용해야 합니다.unsigned char위해서pixel_data또는 을 통해 캐스팅합니다.unsigned char또는 승진 후 마스킹 작업을 사용합니다.

예.

printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0] );

또는

printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU );

표준 형식 플래그를 더 잘 사용합니다.

printf(" %#1x ", pixel_data[0] );

그런 다음 컴파일러가 16진수를 입력합니다.

사용하다%hhx

printf("%#04hhx ", foo);

그리고나서length수식자는 최소 길이입니다.

너비 지정자 위치printf실제 최소 너비입니다.할수있습니다printf(" 0x%2x ", pixel_data[0] & 0xff)낮은 바이트를 인쇄하는 것(2번째 문자, 실제로 인쇄하는 것)pixel_data[0]0xffffff02).

언급URL : https://stackoverflow.com/questions/3555791/why-does-printf-not-print-out-just-one-byte-when-printing-hex

반응형