안녕하십니까?
초짜라 맨날 묻기만 합니다.
일단 제가 구현하고자 하는 환경부터 설명을 드리겠습니다.
컴과 RS232로 개발 장비를 연결했구요, 델파이에서 Serial 데이타를 받는 컴 포넌트는 CPort262란걸 사용하여 데이타를 받고 있습니다.
그런데 문제는 CPort에서 받은 ASCII값을 String으로 Buffer에 저장했다가 Event를 발생시켜 읽어 가도록 하고 있습니다.
여기서 ASCII값을 String으로 돌려주는 과정에서 문제가 발생했는데,
개발 장비쪽에서 00(10진수)이란 데이터를 전송하게 되면 ASCII값으로 Null이 표현 됩니다.
String형의 특성상 Null은 없는 문자가 되고 다음에 들어오는 문자가 Null이 저장되어야할 자리에 저장이 됩니다.
한마디로 요약하자면
전 Null이라해서 표현 안하는게 아니라 ASCII Code값이 어떳턴간에 구애 받지 않고 00을 장비에서 전송했으면 다시 ORD란 함수를 이용하여 00이란 Integer형으로 바꾸고자 하는게 목적입니다.
제가 사용하고 있는 컴포넌트에서 돌려주는 형이 String형이라 이걸 어떻게 처리 해야 할까요? Null일경우 라도 00으로 저장이 되게 말이죠
팀좀 알려 주시면 감사하겠습니다........
모두들 즐거운 주말 되세요 *^^*
◇□ "/
□ ◇□ ◇ 시원한
┃아이┃ 아이스티
┃스티┃ 한잔의 여유
┗━━┛◇□
그냥, 참고만 하세요.
델파이의 String 형은 C 언어의 문자열형과는 다르게, 0(Null) 문자가 중간에
와도 상관없도록 되어 있습니다. 이는 델파이의 문자열형이 문자열의 끝을
인식하기 위해서 0 문자를 사용하는 것이 아니라, 문자열 앞에 따로 문자열의
길이를 저장하고 있는 형태로 되어 있기 때문입니다.
제각 생각하기에 스트링형 자체의 문자라기 보다는(왜냐하면, String의 길이를
SetLength로 미리 충분히 잡아 주었다면, 장비에서 어떤 데이터를 보내던지
받을 수 있다고 생각됩니다.) 사용하시는 컴포넌트의 문제인것 같습니다.
컴포넌트에서 다른 데이터 없이 그냥 0을 받았을 경우, Null 을 반환하도록
말입니다.
컴포넌트 내에 데이터를 받는 다른 메소드(포인터 버퍼를 이용하는 등의)가
있는 살펴보시고, 대체할 만한 다른 메소드가 있다면, 그 메소드를 사용하시고,
대체할 메소드가 없다면, 이런 기능을 지원하는 컴포넌트를 사용해 보시는
것이 좋을 것이라 생각됩니다.
실제로 제가 Com 포트를 통한 프로그래밍을 해보질 못해서 더 자세한 설명은
불가능 하겠네요... 어쩜 위의 답변도 허접한 것일 수도... -_-;;;
혹은, 장비에서 받은 데이터가 Null 이면, 0 값을 대신 입력하도록 할 수도
있지 않을까요???(하하.. 이건 답변이 아니라, 오히려 질문이 되어 버렸군요. ^^)