16진수를 인쇄할 때 printf가 1바이트만 출력하지 않는 이유는 무엇입니까?
pixel_data
이다.vector
의char
.
내가 할 때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
'programing' 카테고리의 다른 글
matplotlib 플롯의 왼쪽 위 모서리에 텍스트 삽입 (0) | 2023.07.19 |
---|---|
Vue에서 반복 테이블 행의 확인란 값을 배열로 전달하는 방법은 무엇입니까? (0) | 2023.07.19 |
변수가 정의되었는지 확인하시겠습니까? (0) | 2023.07.19 |
몽구스에서 랜덤 레코드를 찾는 방법 (0) | 2023.07.14 |
Spring-Boot 다중 모듈 프로젝트 로드 속성 파일 (0) | 2023.07.14 |