char ar[] = "가";
라고 초기화하고
printf("%x\n", ar[0]); printf("%x\n", ar[1]); 이렇게 출력하면
ffffffb0 ffffffa1 으로 나옵니다
그리고, char ch = 'a'; 를 %x로 출력하면 16진수 61 이 나오게 되죠
어째서 같은 1바이트인데 2바이트 문자를 한바이트만 출력하면 ffffff 가 붙어서 나오는 걸까요?
초보 공부에 힌트를 부탁합니다
'가'는 완성형(EUC-KR) 코드로 0xB0A1 이라는 코드를 가지고 있습니다.
char ar[] = '가';
는
char ar[2] = { 0xB0, 0xA1 };
이라는 거죠. 그래서 a[0]을 찍으면 0xB0, a[1]을 찍으면 0xA1 이 나오고, 0xffffff 가 붙는 건 char로 0xB0, 0xA1은 음수고, printf에 인자로 넘어가면서 int로 확장되면서 0xffffff가 붙는 듯 하네요
(unsigned char)0xB0 = (char)-0x50 = (int)-0x50 = (unsigned int)0xFFFFFFB0
이런 느낌?
unsigned char ar[2] = '가';
이렇게 하면 B0, A1 이 찍히지 않을까 싶습니다.
아 unsigned가 아니라서 사이즈가 늘어난거군요
답변감사합니다
------------------------- 내 악마를 영혼에게 팔아넘기다
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
일단 한글은 한바이트가 아니죠
'가'는 완성형(EUC-KR) 코드로 0xB0A1 이라는 코드를 가지고 있습니다.
char ar[] = '가';
는
char ar[2] = { 0xB0, 0xA1 };
이라는 거죠. 그래서 a[0]을 찍으면 0xB0, a[1]을 찍으면 0xA1 이 나오고, 0xffffff 가 붙는 건
char로 0xB0, 0xA1은 음수고, printf에 인자로 넘어가면서 int로 확장되면서 0xffffff가 붙는 듯 하네요
(unsigned char)0xB0 = (char)-0x50 = (int)-0x50 = (unsigned int)0xFFFFFFB0
이런 느낌?
unsigned char ar[2] = '가';
이렇게 하면 B0, A1 이 찍히지 않을까 싶습니다.
우왕~ 감사합니다
아 unsigned가 아니라서 사이즈가 늘어난거군요
답변감사합니다
-------------------------
내 악마를 영혼에게 팔아넘기다
댓글 달기