C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[26846] Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;
이채호 [] 1533 읽음    2003-08-21 15:10
우선 첫 프로그램의 예제는 AnsiString을 배열화하여 그 녀석을 보낸다는 의미를 주셨는데

그렇게 처리 못하는 이유는 그 녀석에겐 저장한 문자에 대한 추가적인 정보들이 대단히 많은 복잡한 녀석이기때문입니다.

우리가 생각하는 일반 변수가 아닙니다.

문자도 들어가고 숫자도 들어가고 저장한 문자 길이나 기타 정보들도 가득합니다.

마치 구조체 같은 녀석 같더군요

아무튼 이러한 복잡한 녀석을 배열로 잡은 것은 가능하지만 그것을 포인터로 사용하는 것은 불가합니다.

그리고 두번째로 통신에 대한 부분을 조금 더 이해하실 필요가 있습니다.

통신에서 주고 받는 데이터는 일반 숫자가 아닙니다.

항상 주는 데이터랑 받는 데이터는 아스키코드 임을 명심하셔야 합니다.

Hex로 보낼려해도 통신 내부에서 돌아다니는 것은 아스키 문자입니다.

Hex로 만들어 송신 부분에 전달하신건 잘 하신 겁니다. 왜냐하면 아스키 코드에 다루기 힘든 부분이 있기 때문입니다.

그것이 제어 문자들입니다.

제어문자는 화면에 표시도 안되고 자신의 기능을 하게 되는데...

0x10부터 0x19까지는 백스페이스, 한줄 라인피드나 캐리지 리턴 등의 기능을 하는 것들입니다.

그러니 수신측에서는 당연히 보는게 불가능하죠~

이를 명확히 보시려면 받은 데이터를 다시 Hex로 변환하셔야 합니다.

변환부분의 함수를 추가하시면 모든 답을 아실 겁니다.

혹시 필요하시다면 이 예제를 사용하세요~

참고로 다른 방법으로 Hex변환 프로그램 적용해서 보니 몇개가 빠지는 정보들이 존재해서 포기하고 본 예제를 사용합니다.

개선하시려면 개선하셔도 됩니다.

저는 구찮아서~

^^;

그럼 수고 하십시오

void __fastcall TAsnyComm::AscToHex(char *Buf, AnsiString &HexData)
    int HighHex, LowHex;
    char TempChar;
    AnsiString TotalChar, HighChar, LowChar;

    TotalChar = Buf;

    if(TotalChar.Length()==0)
    {
        HexData = "Empty";
    }
    else
        for(int i=0; i<TotalChar.Length(); i++)
        {
            TempChar = Buf[i];

            LowHex = ((TempChar & 0x0f) | 0x30) - 48;
            HighHex = (((TempChar >> 4) & 0x0f) | 0x30) - 48;

            switch(LowHex)
            {
                case 10 : LowChar = 'A'; break;
                case 11 : LowChar = 'B'; break;
                case 12 : LowChar = 'C'; break;
                case 13 : LowChar = 'D'; break;
                case 14 : LowChar = 'E'; break;
                case 15 : LowChar = 'F'; break;
                default : LowChar = IntToStr(LowHex); break;
            }

            switch(HighHex)
            {
                case 10 : HighChar = 'A'; break;
                case 11 : HighChar = 'B'; break;
                case 12 : HighChar = 'C'; break;
                case 13 : HighChar = 'D'; break;
                case 14 : HighChar = 'E'; break;
                case 15 : HighChar = 'F'; break;
                default : HighChar = IntToStr(HighHex); break;
            }

            HexData = HexData + HighChar + LowChar;
        }
}

+ -

관련 글 리스트
26825 [왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ; 요쿠르트 1062 2003/08/20
33160     Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ; 즐겁게~ 1588 2003/08/20
33159     Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ; 김성협 2411 2003/08/20
26846     Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ; 이채호 1533 2003/08/21
26831     Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 초보 1234 2003/08/20
33158         Re:Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 김성협 1199 2003/08/20
33157         Re:Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 쏭이 969 2003/08/20
33156         Re:Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 쏭이 1123 2003/08/20
33155         Re:Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 요구르트 1068 2003/08/20
33154         Re:Re:[왕 긴급질문]HEX값을 넣는 배열....ㅜㅜ;--> 어! 안되는데요? --; 쏭이 1028 2003/08/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.