|
소스코드 일부만 있는거 같은데용..
str.t_str().... 이 부분은 2009에서 새로 지원하는 String의 메소든가 보군요..
저는 아직 6.0 을 쓰는 처지라..유유
음.. 작성하신 코드 상으로는 풀어보면.
1) char 어레이를 초기화 한다.
2) String 형 데이타에서 특정 부위(?) 만큼의 숫자 필드 영역을 잘라서 char배열에 담는다.
3) int형으로 형변환 한다.
4) int형을 다시 형변환 하여 String( Caption )에 담는다..
순으로 진행이 되는데요..
나열한거에 보다 시피 형변환이 좀 빈번히 발생하는게 아닌가 싶네요.
윗분들 말씀하신 거에 좀더 사족을 달아 보자면..
위에서 거치는 형변환을 좀 줄이자 입니다.
윗분들 코드 사례를 보면 char *어레이 형 데이타가 필요 없어지지요.
( 내부에서 쓸일이 없다면 말입니다.. )
이부분을 좀 줄여서 2단게로 만들어 버리는게 제 개인적인 생각으로 좀 더 나은 생각이 아닌가 사려 됩니다.
// 1 필요한 데이타 부분을 Label에 바로 담아 버립니다.
Label1->Caption = Edit1->Text.SubString( 4 , Edit1->Text.Length() - 3 );
// 2. Label1을 버퍼로 사용하였으므로 가공을 위한 인트형으로 바로 세트 한다.
int ibuff = Data.ToInt();
이렇게 되면 좀 더 효율이 올라가지 않으려나요...
Label을 사용하지 않을 계획이라면 윗분들의 예제 처럼 바로 Int 변수에 결과를 담아 버리는 것도 괜챦구요..
만약 위에 사용하신 데이타가 "abc1234" 가 Fixed length 타입의 전문 이라고 하면...아래 처리 부분 처럼 하면
될 듯 싶네요.. fixed length 인 경우 가공작업이 좀 필요하기도 합니다. 널스트링 이 없는 관계로.. 하지만 파일에서
로드하는 경우라면 파일에 구조체 통으로 바이너리 타입 저장 이라면 별 문제 업겠지용.
//---------------------------------------------------------------------------
#pragma pack( push , 1);
typedef struct tag_x
{
char ABC[3];
char NUMS[4];
}st_x;
#pragma pack(pop);
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 원본 ..
String Data = Edit2->Text;
char buff[4+1];
int x;
memset( buff , 0x00 , sizeof( buff ));
strncpy( buff , (Edit2->Text.c_str())+3 , Edit2->Text.Length() - 3 );
x = atoi( buff );
ShowMessage( x );
// 잛게
Label1->Caption = Edit1->Text.SubString( 4 , Edit1->Text.Length() - 3 );
x = Label1->Caption.ToInt();
ShowMessage( x );
// 고정전문 방식. 뒷부분에 다른 문자열이 있다면 잘라 담는 처리를 위한 버퍼 필요함( 1234 ) 다음
st_x sbuff;
memcpy( &sbuff , Edit2->Text.c_str() , sizeof( sbuff ));
Label3->Caption = sbuff.NUMS;
ShowMessage( atoi( sbuff.NUMS ));
}
//---------------------------------------------------------------------------
즐 플 하세염~~~!
|