C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[39278] Re:sign이 붙고 안붙으면..
2HB [thigon] 1023 읽음    2005-02-25 14:08
기본적인 ascii값은 7비트로 이루어집니다. 그러니까 최대치는 7F까지 있게 되는 형태죠.(00 - NULL에서 부터 7F - Del까지는 쉽게 찾으실수 있음) 그런데. 이경우 특수문자, 한글등을 표현하는데 여러가지 문제가 생기게 됩니다. 해서 8비트를 사용하는 데이터처리를 하게 되는데 이경우 ASCII이후의 표현될 내용은 첫번째비트가 1이 나오게 됩니다.
헌데 signed 의 경우에는 첫번째비트는 음수&양수구분열이 되기 때문에 signed일 경우에 int로 변환시켜보면(1char단위로 쪼개서 int형으로 변환. 따로 손을 안대고 그냥 집어넣어도 알아서 변환되어서 들어가죠..;;) 특수문자의 경우 -값이 나옵니다. 하지만 unsigned int에다가 unsigned char를 집어넣으면 아마 255까지의 양수로 변환되지 않을까..하고 생각해봅니다.(.... 사실 한번도 저런 식으로 변환시켜본적이 없어서 솔직히는 잘 모르겠습니다. 해보신분 계시면 help ;;)

php같은 경우는 알아서 unsigned로 변환되어 버려서 좀 난감하던 기억도 있네요..-_-;;

그리고, 포인터의 경우엔 그저 주소값일 뿐인것 아니던가요;; 아마 char*나 unsign char*나 값자체는 똑같지 않을까 싶은데요;; 다만 문자열이 저장된 시점에서 그게 signed인지 unsigned인지의 차이가 있겠죠.

뭐, 간단히 말하자면 unsigned char에는 FF값이 저장될수 있지만 signed char에는 저장되지 못하는 것이 아닐까..하고 생각합니다.(...그런데 실제로 넣어보면 걍 알아서 들어가더라는....   -_-;;;)

...하여간. 원론적으로는 다르다고는 하는데 아직까지는 저도 뭐가 다른지는 느끼긴 힘들었어요 -_-;
굳이 말하자면 Message날릴때 sign으로 날리면 가끔 이상해져서 unsign으로 날려주는 정도인 듯...;;


p.s. 아차 -_-. 특수문자&한글인 것 파악할때 0보다 작으면 한글이다. 라는 식의 코딩(문자열 길이 구하는 코드에서 흔히 볼수 있죠)에서는 차이점이 생겨날 것 같네요. 아마 unsigned가 생각대로 값이 나오면 128을 기준으로 나눠야 겠죠.

혼자서 실험결과 -
예상대로 변환시켜보면 한글이 -가 아니라 128을 넘는 값으로 변합니다.
다만 unsigned int에다 넣을 필요는 없어요 ^v^ 그냥 int에다 넣어도 잘 변합니다. 그리고 unsigned int에다가 그냥 char형태를 넣어보면 깨집니다 -_-; 그리고 그냥 char형태를 사용하듯이 String이나 AnsiString에다 넣어지질 않습니다.(제 경우엔 그냥 = 으로 넣어버립니다 -_-.. 그래서 그런 걸지도..) 헌데 재밌는 건 그냥 char* 하나 가상으로 만들어놓고 이 녀석을 경유해서 넣어보면 전혀 문제 없이 돌아갑니다. 그러니까 char*를 AnsiString으로 형변환은.. 뭐 너무 당연히 가능하지만 (타입케스트도 필요없죠.)unsigned char*는 AnsiString 형변환이 불가능-(String)을 사용해도 안됨-하지만, char*로는 자연스럽게 변환가능. 그러므로 돌아가면 된다... 라는 생각이 드네요.
어디까지나 혼자 실험의 결과이므로 신뢰도는 없습니다.(....)

C++초보 님이 쓰신 글 :
: 제목 그대로인데요.
:
: usigned char의 포인터도 문자열을 갖을 수 있고
: signed char의 포인터도 문자열을 갖을 수 있습니다.
:
: 뭐 어짜피 1byte이기때문에..
:
: 그리고 char에 부호가 있는것과 부호가 없는 것....
:
: 이것의 차이점이 뭔가요?..
:
: 어떤경우에 usigned 를 쓰고 어떤경우에 signed를 써야할지 확실히 모르겠군요..
:
: 설명 부탁드립니다.

+ -

관련 글 리스트
39277 usigned char와 signed char의 이용 용도를 알고 싶습니다. 차이점두요.. C++초보 1065 2005/02/25
39278     Re:sign이 붙고 안붙으면.. 2HB 1023 2005/02/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.