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
[13329] Re:질문 다시 올립니다.^^
이방형 [] 764 읽음    2001-12-04 11:57
Edit5->Text 를 Edit5->Text.ToInt()로 바꿔 보세요.

768 이상일 때 디버깅 해보니 원하는 루틴을 타지 못하더라구요.
AnsiString형을 정수랑 비교했는데 768까지 정상적으로 동작했는지는 모르겠군요.
(제가 해봐도 동작했음...근데 루프는 제대로 타지만 결과는 이상했음)

정수로 일단 변환한 후 실행해보니 아주~ 잘 되는군요.

시리얼 통신에서 사용하신다고 했는데 자료량이 그리 많지 않다면
ASCII전송을 사용하시는게 어떨지요...^^
그럼 즐프하세요...^^

    BYTE TotalDataClampsend7;
    BYTE TotalDataClampsend11;

    TotalDataClampsend7=TotalDataClampsend7 & (char)0x00; //0000 0000
    TotalDataClampsend7=TotalDataClampsend7 | (char)(StrToInt(Edit5->Text)<<0);

             //ff-1
    if(256-1< Edit5->Text.ToInt() && Edit5->Text.ToInt()<512)
    {
        TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
        TotalDataClampsend11=TotalDataClampsend11 | 0x01<<0;
    }       //1ff-1
    else if(512-1< Edit5->Text.ToInt() && Edit5->Text.ToInt()<768)
    {
        TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
        TotalDataClampsend11=TotalDataClampsend11 | 0x02<<0;
    }       //2ff-1                   //3ff
    else if(768-1 < Edit5->Text.ToInt() && Edit5->Text.ToInt()<1024)
    {
        TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
        TotalDataClampsend11=TotalDataClampsend11 | 0x03<<0;
    }
    else
    {
        TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
    }
    TotalDataClampsend7=TotalDataClampsend7 & (char)0x00; //0000 0000
    TotalDataClampsend7=TotalDataClampsend7 | (char)(StrToInt(Edit5->Text)<<0);

    Label1->Caption = AnsiString(TotalDataClampsend11*256+TotalDataClampsend7);

<== 표시된 값과 일치하게 나오는군요..


heartsim 님이 쓰신 글 :
: 오늘 아침에 와서 소스를 봤는데 역시나 안돼더군요.
: Edit가 char로 밖에 연산을 못하나?? 아닌 것 같기도 한데...^^
: 도무지 해답이 나오지 않고 시간은 없어서 이렇게 또 질문올립니다.소스 보여드릴게요..
:
: 아래 소스가 있지만, 간단히 설명 드리면...
:
: UpDown을 눌러서 1씩 증가를 시킵니다.그리고 그 UpDown값은 Edit5->Text로 들어가죠.
: (참고로 UpDown Max속성은 1024로 했음. 더 많게 잡았어도 안됨..)
:
: 만약 UpDown값이 255값(헥사로 ff)이하이면
: 즉, 다시 말해 Edit5->Text값이 255값(헥사로 ff)이하이면...
: TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
: TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
: 로 일단 버퍼 7에 저장하고 그리고....
:
: 버퍼11에...저장...
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
: 됩니다.
:
: 그러니간 이 소스의 결과는 간단히 말하면
:
: 10비트짜리 파라미터(데이터)를 표현하기 위해서 나머지 상위 2비트는 다른 버퍼를 이용해
: 저장한다는 거죠...
: 말이 좀 어렵나?^^
:
: 이런식으로 하는데, 문제는
: 0~255(ff)와 255~512(1ff) 그리고 512~768(2ff)까지는 잘 되는데,
:
: 768(2ff)~ 1024(3ff)까지의 범위안에서는 잘 안되더군요.
: 그냥 255~512상태로 돌아가더군요.
: Edit5는 1024까지 표현이 잘 되는데....
:
:
: 왜 768이상에서는 안 되는지.....
: 답변 주시면 감사하겠씁니다.
:
: 즐거운 하루되세요.
:
:
:         if(Table1->FieldByName("Name")->AsString=="CLIPS1B")
:         {
:
:                TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
:                TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
:
:                       //ff-1
:                if(256-1< Edit5->Text && Edit5->Text<512)
:                {
:                         TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
:                         TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
:                }     //1ff-1
:                else if(512-1< Edit5->Text && Edit5->Text<768)
:                {
:                         TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
:                         TotalDataClampsend[11]=TotalDataClampsend[11] | 0x02<<0;
:                }     //2ff-1             //3ff
:                else if(768-1 < Edit5->Text && Edit5->Text<1024)
:                {
:                         TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
:                         TotalDataClampsend[11]=TotalDataClampsend[11] | 0x03<<0;
:                }
:                else
:                {
:                         TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
:                }
:                TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
:                TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
:
:         }
:
:
:
:
: heartsim 님이 쓰신 글 :
: : 안녕하세요...
: : 낮에 회사에서 프로그램을 짜다 안되서 이렇게 집에 와서^^ 간단하게 나마 질문 올립니다.
: : 자세한 질문내용은 내일 다시 부탁드리죠.....
: :
: : 다름아니라...
: : Edit->Text에 f4나 1f7 그리고 2f3등등의 헥사값은 잘 프로세싱 되는데,
: : 3f4와 같은 그 이상의 비트값에서는 if문에서 인식을 못하고 초기값으로 돌아가더군요.
: : (시리얼 통신에서...)
: :
: : 더 자세한 소스구문은 낼 올리고자 하니..혹 아시는 분은 간단한 답변 부탁드립니다.
: : 급한 마음에 이렇게 질문 올립니다.
: :
: : 즐거운 하루 되세요.............
: :
: : from heartsim
:
:
:
:

+ -

관련 글 리스트
13318 Edit에 3f4(헥사값)을 입력하고 시리얼 전송했더니, if문에서 인식을 못하더군요... heartsim 1226 2001/12/03
13326     질문 다시 올립니다.^^ heartsim 744 2001/12/04
13329         Re:질문 다시 올립니다.^^ 이방형 764 2001/12/04
13331             넘넘 감사.........합니다.^^ heartsim 812 2001/12/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.