|
와~우~~ ^^;;
정말 고맙습니다.
locke님의 친절한 답변 정말 고맙습니다.
더욱 열심히 분발 할께요..^^;;
고맙습니다...
-------------------------
모두 즐거운 하루 되세요.
아~자~~!
locke 님이 쓰신 글 :
: 이건 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 값을 넣고 싶은데요.
: : : : 어떻게 해야 하나요?
: : : : 많은 가르침 부탁합니다.
: : : :
: : : : -----------------------
: : : : 모두 즐거운 하루 되세요.
: : : : 아~자~~!
|