dev.log2008. 2. 25. 21:00

처음 유니코드 문자열을 만날 때 흔히 하는 오해(혹은 실수)는.. char*를 wchar_t*로 바꿀 때 그냥 캐스팅하면 되리라는 것이다. (나도 그랬다)

 

그런데, char*로 표현되는 문자열은, MBCS - multi-byte character set - 문자열이고, wchar_t*로 표현되는 문자열은 WCS - wide character set - 문자열이다. 서로 코딩 스킴이 다른 문자열이다. 단순 치환만으로는 변환할 수 없다.

MBCS문자열 - 즉, MBS는 보통 ASCII와 각 국가의 코드 페이지별 OEM코드를 사용하는데, 이 코드 페이지마다 같은 코드에 다른 문자를 넣어 두게 된다. 따라서 MBS에서 한글(코드페이지 949) '가'의 코드포인트는 0xb0a1인데, 다른 코드페이지에서는 (이를테면 일본어) 그 국가의 다른 글자를 나타낼 수 있는 코드이다. 이는 문자를 표현할 때 국가마다 서로 다른 코드를 쓰기 때문인데, 이를 통합하기 위해서 유니코드 문자열을 쓰며, C에서는 유니코드 문자열을 위해 문자마다 2바이트를 쓰는 WCS를 쓴다.

MBS 코드페이지 949에서 한글 '가'의 코드는 0xb0a1라고 했다. 그런데 WCS에서 한글 '가'의 코드포인트는 0xac00이다. 그럼 WCS에서 0xb0a1에 해당하는 글자는? 인텔머신은 리틀 엔디언을 쓰므로, OEM코드 0xb0a1은 0xa1b0로 저장되며, 이 코드는 'ꆰ'이다. MBS의 내용물을 그대로 WCS 문자열 버퍼에 '복사'하는 것으로는 문자열 변환이 안된다는 말이다. 물론, 그 내용물이 영미권의 영문 알파벳만이라면, 제대로 이루어진다. 이들은 ASCII코드이며, 유니코드 체계에서도 ASCII영역(코드포인트 0~127까지)은 크게 변화되지 않은 채로 남아있기 때문에. 하지만 다른 국가의 언어는 절대 저렇게 해서 변환이 이루어지지 않는다. 한글은 물론이고, 알파벳을 쓰는 다른 국가의 - 독일, 프랑스, 스페인, 노르웨이, 핀란드 등등 - 언어도 마찬가지다.

 

그럼 한글 "가"를 한글 L"가"로 제대로 바꾸려면? 표준 문자열 라이브러리 함수가 있다. mbstowcs, wcstombs등의 함수가 MBS-WCS사이의 문자열 변환을 해준다.

 

Posted by uhm
geek.log2008. 2. 16. 11:58

장장 2년에 걸쳐 제작중인 (작년 10월에 사서 짱박아두고 있었음) RX-178 건담 마크II.

보통은 그냥 막투;라고 부른다. 본체는 다 만들었고.. 이제 등짐과 총기류만 만들어주면 된다.

막투 PG를 갖고 있는 입장에서, MG와 비교해 본다면, 디테일은 당연히 비교가 안되지만, 프레임 구조는 상당히 잘 되어 있다는 인상. 어떤 면에서는 PG보다 진보한 면도 있다. 그리고 신체비례도 PG보다 더 날렵해져서 상당히 경쾌한 인상.

 

다음은 짤방들.

 

사용자 삽입 이미지

무예수련중

 

사용자 삽입 이미지

하.. 항복!!

 

 

정강이 앞판 장갑은 보는 바와 같이 발목을 수평으로 펴면 밑으로 내려간다. 허벅지의 슬라이드식 장갑은 스트라익 PG에서 따온 방식. 무릎부분의 장갑도 무릎을 굽히면 2개가 따로따로 움직여서 약간 올라온다.

 

역시 건담은 막투;

 

Posted by uhm
geek.log2008. 2. 6. 21:29

여기에서 SSE 내장 함수를 쓰면 2배 정도의 성능 향상이 있다고 썼다. 그런데 이거 말고도 약 3배 정도의 성능 향상을 보이는 기법을 내 친구가 알려 줬다. 코드 생산성은 조금 떨어질 지 몰라도, 수행 성능은 확실히 3배정도까지 빨라진다고 한다.

이쪽 분야에 익숙하지 않은 사람은 식겁할 수 있으므로, 접는다.


Posted by uhm