2014-04-05 4 views
0

정수를 문자로 저장하려고합니다.int를 char로 저장 하시겠습니까?

char i = 80; 
printf("0x%x", i); 

위 코드는 0x50 (1 바이트)를 표시합니다. 그러나 값이 128보다 크면 4 바이트 값을 인쇄합니다.

값이 128 (잉크 막 (82) 대신에 두 번째 예에서 ffffff82)보다 크면

방법 I은 단지 1 바이트로 정수 값을 저장할 수

char i = 130; 
printf("0x%x", i); // this prints 0xffffff82 
?

+3

'unsigned char i = 130; ' – Marian

+0

'% x '형식 지정자는 16 진수 값을 인쇄합니다. 나는'i'가 승진되고 있다고 믿습니다. 그래서 여러분은 8 비트 옥텟이 아닌 정수를 출력하고 있습니다. 그것이 당신이'0xffffff82'를 보는 이유입니다. 'int' ->'char' truncations에 대해서도 걱정해야합니다 (일반적인 경우). – jww

답변

1

char 형식이 서명 된 시스템에서 예상되는 동작입니다. 음수 값인 charint의 크기로 부호 확장됩니다. 마지막 8 개 비트를 인쇄하려는 경우

,이 같은 0xFF와 마스크 수 :

Demo on ideone합니다.

대체 방법은 unsigned char을 사용하는 것입니다. 이렇게하면 8 비트 숫자의 부호 확장을 피할 수 있으며 가장 중요한 비트는 1으로 설정됩니다.

관련 문제