printf 에서 char를 %02x로 출력하는데 음수의 경우 int 처럼 출력됩니다.

leadha의 이미지

char* ptr=addr

printf("%02x",*(ptr+i));
printf("%02x",ptr[i]);

양쪽 모두 해당 바이트가 0xff 일때 ffffffff 로 출력되더군요.

ptr을 unsigned char* 로 선언해주면 정상적으로 ff 가 뜹니다.
이유를 모르겠는데 혹시 답변을 주시거나 참고할만한 것을 알려주시면 감사하겠습니다.

익명 사용자의 이미지

%x format의 parameter는 int type 입니다.
따라서 char type이 아니므로 sign extension이 발생합니다.
signed char -> int와 unsigned char -> int의 음수 변환 차이만 알면 쉽게 이해할 수 있습니다.

leadha의 이미지

감사합니다!