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
[57886] Re:Re:Re: 문제는 해결 됐지만 --> 추가적인 질문이 생겼습니다.
locke [syiware] 835 읽음    2009-08-01 12:47
이건 class의 이항연산(a+b혹은 a-b, 기타등등)과 관련이 있는데요..

제가 쓴 예제는 모두 SendStr += <값>; 입니다. AnsiString도 c++빌더가 정의한 클래스입니다.

클래스의 연산자를 정의해놓고 거기에 맞는 타입의 연산이 있으면 처리를 합니다. 당연히 AnsiString + <char>,

AnsiString + <문자열(null-terminated string)>, 등등..지원이 됩니다.

근데 님께서 쓰신 소스는요..

: ⓑ번:   SendStr = "\x02" + (char)Len + Strn + (char)ETX;;

rvalue를 처리하여 처리가 끝난 이후 lvalue에 넣는 식입니다.

(제꺼는 AnsiString += <값>, 풀어쓰면 AnsiString = AnsiString + <값>이 됩니다.)

SendStr(=AnsiString) 클래스 객체가 받는건 맨 마지막 대입할때 결과산출물(X)이겠죠.

"\x02" + (char)Len <-요론곤 AnsiString으로 해결이 되지않구요.

rvalue중에 연산자 우선순위에 의하여 왼쪽부터 오른쪽으로 처리가 되겠지만

님의 식을 연산자 단위로 쪼개서 각각 계산하여 AnsiString에 대입해보시면

빌더 컴파일러가 어떻게 자료를 처리하는지..확인이 가능할 것 같습니다.

1=0000003D
2=00000041
3=00000042
4=00000003

(같은 블럭에 다른 AnsiString을 선언하고 똑같이 처리하면 또 다른 값이 나옵니다. 끝에 41,42,03은 똑같구요.)

이건 님 식의 결과인데요. null-terminated string "\x02"를 해석해보니

컴파일러가 char + char로 인식한거 같지는 않구요. 모든 ""(null-terminated string)은 그거 자체가

스스로의 포인터기 때문에 문자열 "\x02"의 주소값과 뒤의 (char)Len을 합쳐서

0x3d가 된 듯 합니다.

자세한건 더 연구를 해보세염..

-locke

아~자~~! 님이 쓰신 글 :
: 안낭하세요. locke님! ^^
: 김진호님과 locke님의 의견을 종합하여 문제는 해결되었는데요...
: 궁금한 점이 하나 생겼습니다.
:
: ⓐ번:   SendStr = "\x02";
:            SendStr += (char)Len; //1
:            SendStr += Str;
:            SendStr += (char)ETX; //2
:
: ⓑ번:   SendStr = "\x02" + (char)Len + Strn + (char)ETX;;
:
: 위의 ⓐ번과 ⓑ번의 결과값은 다르던데요..
: 혹시 ⓐ번은 각 line을 수행할때마다 뒤에 NULL이 붙고
: ⓑ번은 중간에 NULL이 붙지 않아서 인가요?
:
: 만약 그렇다면 ⓑ번의 중간에 NULL값들을 어떻게 추가 할 수 있을까요?
: String((char)Len) 과 같은 방법 뿐일까요?
:
: ----------------------------------
: 모두 즐거운 하루 되세요.
: 아~자~~!
:
:
:
:
:
: locke 님이 쓰신 글 :
: : 아래처럼 하세요.
: :
: : #define      ETX     0x03
: :
: :  AnsiString    SendStr, Str;
: :  BYTE     Len=2;
: :
: :  Str = "AB";
: :  SendStr = "\x02";
: :  SendStr += (char)Len; //1
: :  SendStr += Str;
: :  SendStr += (char)ETX; //2
: :
: : 확인방법은 Memo1 하나 올려놓고
: :
: : for(int i = 1; i <= SendStr.Length(); i++) Memo1->Lines->Add(IntToStr(i) + "=" + IntToHex(SendStr[i], 8));
: :
: : 원하시는대로 들어갔는지 확인해보세요. 아래는 그 리턴값입니다.
: :
: : 1=00000002
: : 2=00000002 <-길이
: : 3=00000041
: : 4=00000042
: : 5=00000003 <-ETX
: :
: : -locke
: :
: : 아~자~~! 님이 쓰신 글 :
: : : ///*******************************************///
: : : #define      ETX     0x03
: : :
: : : AnsiString    SendStr, Str;
: : : BYTE     Len=2;
: : :
: : : Str = "AB";
: : : SendStr = "\x02" + ①번 + Str + ②번;
: : : ///*******************************************///
: : : 
: : : 위와 같은 소스가 있다고 가정할때,
: : : SendStr의 Data 값이 다음과 같이 되도록 하고 싶습니다.
: : : [0] = 0x02
: : : [1] = 0x02         //  Len  (①번)
: : : [2] = 0x41         //  A
: : : [3] = 0x42        //   B
: : : [4] = 0x03        //   ETX  (②번)
: : :
: : : ①번 에는 Len 값을 넣고 싶고요.
: : : ②번 에는 ETX 값을 넣고 싶은데요.
: : : 어떻게 해야 하나요?
: : : 많은 가르침 부탁합니다.
: : :
: : : -----------------------
: : : 모두 즐거운 하루 되세요.
: : : 아~자~~!

+ -

관련 글 리스트
57879 [질문] AnsiString에 정수 값을 어떻게 추가해야 하나요? 아~자~~! 1109 2009/08/01
57884     Re: 답변 주신 분들의 말씀으로 해결 했습니다. 고맙습니다. 아~자~~! 1197 2009/08/01
57881     Re:[질문] AnsiString에 정수 값을 어떻게 추가해야 하나요? locke 1224 2009/08/01
57885         Re:Re: 문제는 해결 됐지만 --> 추가적인 질문이 생겼습니다. 아~자~~! 971 2009/08/01
57886             Re:Re:Re: 문제는 해결 됐지만 --> 추가적인 질문이 생겼습니다. locke 835 2009/08/01
57893                 Re:Re:Re:Re: 문제는 해결 됐지만 --> 추가적인 질문이 생겼습니다. 아~자~~! 2371 2009/08/01
57880     Re:[질문] AnsiString에 정수 값을 어떻게 추가해야 하나요? 김진호.불사새 953 2009/08/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.