|
김경완 님이 쓰신 글 :
: 지난번에 올린 내용인데요....아직 해결이 나지 않아서 다시 올립니다.
: 이런 경우를 아시는 분 혹시 안계십니까....?
: 간곡히 부탁드립니다.
:
: Memo1 에 0x01, 0x02, 0x03 ...... 을 직접 타이핑하면 입력이 됩니다.
: 그런데 메모장등에서 복사 해서 붙여넣기를 하고 값을 확인하면
: 입력되어 있지 않습니다.
: 이런 경우를 아시는분 좀 가르쳐주세요..
:
:
: //------- 관련 소스 -------------------------------------------------------
: char * iPos;
: int result;
: BYTE image[100];
: String strTmp;
:
: strTmp = Memo1->Text.c_str(); //0x01, 0x02, 0x03, 0x04.....입력
: while(exist_0x)
: {
: iPos=NULL;
: iPos = strstr(strTmp.c_str(), "0x");
: if(iPos)
: {
: result = iPos - strTmp.c_str() + 1;
: image[i] = StrToInt(strTmp.SubString(result, 4));
: strTmp = iPos+6;
: i=i+1;
: }
: else exist_0x = FALSE;
: }
:
: memcpy((char *)Qdata[count].IMG, image, size);
: //---------------------------------------------------------------------------
:
: 부탁 드립니다.
님의 소스에는 여러가지 문제점이 있지만,
가장 핵심적인 건요,
Memo1->Text가 아니라 Memo1->Lines->Text로 해야합니다.
왜 이렇게 해야 하는 지는 도움말과 빌더 책을 참고하세요.
참고로, 빌더에서 문자열을 다룰 때, C 스타일의 char* 배열 사용은 지양하는 것이 좋습니다.
(흠... 이건 오리지날 C식의 코드를 지극히 싫어하고 C++만을 사용하는
저의 개인적 취향이기도 합니다. ^^;)
가능한 한 String(AnsiString)이나 string을 주로 사용하세요.
그리고 다음 코드는 Memo1에 "0x01, 0x02, 0x03, 0x04 ..."이 입력되어 있다고 할 때,
정수 벡터에 이 값을 차례로 넣고 다시 출력하는 예제입니다.
Memo1->Lines->Text = StringReplace(Memo1->Lines->Text, ",", "\n",
Sysutils::TReplaceFlags() << Sysutils::rfReplaceAll);
vector<int> vInt;
for(int i = 0; i < Memo1->Lines->Count; i++)
vInt.push_back(Memo1->Lines->Strings[i]);
for(int i = 0; i < vInt.size(); i++)
cout << vInt[i] << endl;
|