|
BCB6 으로 현재 시리얼 통신을 하기 위해
CPort 264를 사용해서 통신구현을 해 두었습니다.
하지만 통신을 통해 넘겨주는 형식이 UNICODE?(ASCII? 였나...)로 되어 있어
약간의 문제로 고민을 하고 있습니다.
간단한 컨트롤러와 통신을 하는 것인데...
기본적으로 ON 하는 데이터가
"02 31 31 4F 4E 03" // STX 1 1 O N EOT (보기 편하게 한칸씩 띄워 두었습니다.)- 컨트롤러 1번 채널 ON
라고 되어 있습니다.
ON/OFF 를 제외하고 실 데이터 값을 넘겨 주어야 하는데
AnsiString 형의 문자열 데이타를 UNICODE 로 변환 후,
변환된 채로 다시 AnsiString 에 넣고 싶지만 어떻게 해야 할까요(좌절)
이리 뒤적 저리 뒤적 해서
찾아본 결과
WideString s;
1. s = "안녕하세요"; // 문제 없지만 권장하지 않습니다. ANSI->UTF16 코드변환이 자동으로 이루어지긴 하지만
// 다른 언어환경의 OS에서 실행하면 s에 엉뚱한 값이 들어가겠죠.
2. s = L"안녕하세요"; // 심각하게 문제있습니다. WideString의 = 연산자는 BSTR 타입을 요구하기 때문입니다.
3. s = WideString(L"안녕하세요); // 안전한 방법이지만 메모리 복사가 이루어집니다.
4. WideString s1 = L"안녕하세요"; // 가장 안전하고 성능에도 영향이 없습니다.
5. WideString s2(L"안녕하세요"); // 4번과 동일하죠. 표현만 다를 뿐.
-peperu 님의 글 中-
위와 같은 답변이 있어서 문자 말고 혹시 변수도 되나 해봤지만
와치로 확인해 봤을 때 WideString 와 AnsiString 가 같은 값(AnsiString 값)을 가지는 것을 확인하였습니다.
트랙바에서 데이터를 받아서 변환하고 싶은데, 0~255, 즉 000~255 값이라 좀 지저분합니다....(랄까 실력부족)
void __fastcall TForm1::CH1Change(TObject *Sender)
{
num_ch1 = CH1->Position;
if(num_ch1<10){
ch_num1->Text = "00"+IntToStr(num_ch1);
}else if(num_ch1<100){
ch_num1->Text = "0"+IntToStr(num_ch1);
}else if(100<=num_ch1){
ch_num1->Text = IntToStr(num_ch1);}
change = "1"+ch_num1->Text;//change 가 AnsiString 변수입니다.
}
이걸 어찌해야 UNICODE 로 바꿀수 있을까요...orz
몸 상태가 메롱이라 머리도 잘 안돌아가네요 ㅠ(질문 하는데만 25분째...)
....아니면 배열로 받아서 하나씩 비교해서 붙여넣어야 하는 걸까요....
(어차피 문자는 상관없고 숫자만 비교하면 되니까....(...))
배열로 받는다면 배열 안에 하나씩 집어 넣는것도 문제가....(공부해!)
......이상 질문이었습니....다.
|