|
이건 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 값을 넣고 싶은데요.
: : : 어떻게 해야 하나요?
: : : 많은 가르침 부탁합니다.
: : :
: : : -----------------------
: : : 모두 즐거운 하루 되세요.
: : : 아~자~~!
|