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
[13191] Re:다시 글 올립니다.^^^^^
지나가는 사람 [] 686 읽음    2001-11-28 13:11
자리수를 지정한다는게..
특정 비트만 바꾸고 싶다는 이야기 아닌가요?.

그렇다면.. C의 비트필드 부분을 보세요..

heartsim 님이 쓰신 글 :
: 안녕하세요.빌더 초보입니다.
: 제가 말을 넘 어렵게 했네요....^^죄송...요
: 다시 말씀 드릴게요.
: 음....
:
: 예를 들면,
: 0000 0000->0000 0001->0000 0010->0000 0011->등등...
: 이런 식으로 값이 변해야 하는데, 그렇지 않고.....
:
: 0000 0000->0000 0001->0000 0011->0000 0011 이렇게 바뀌더라구요.
: 그러니간                     -
:                              이 부분이 0으로 되야 하는데,
: static TotalData[],  이렇게 버퍼를 static 으로 잡으니 기존의 1 값이
: 그냥 1로 안 바뀌고 남아 있더라구요.                            
: static 으로 잡지 않고 그냥 버퍼를 잡으면 잘 됩니다.
: 문제는 static인데...그렇다고 안 쓸수도 없구요...^
:
: 그래서 위의 값이 자연스럽게 바뀌도록 할 수있도록 하는 방법을 생각 중입니다.
: 제 생각에는 printf("%02d",j);처럼 자리수를 지정해서 쓸수 있는 방법이 있음 혹시나
: 될 것 같기도 해서요. ^^^
:
: 다른 좋은 방법이 있음 조언 부탁드립니다.
: 제가 워낙 말 주변이 없죠?^^
:
:
: 즐거운 하루되세요..                            
:
:
:
: 지나가는 사람 님이 쓰신 글 :
: : 무엇을 질문하고 계시는 건지..
: : 제가 제대로 이해를 못하겠네요...
: :
: : 하여간..
: :
: : 비트필드를 이용하거나..
: : 0000 0010->0000 0100를 만들거면..|가 아닌 &를 쓰면 될것 같네요..
: :
: :
: : heartsim 님이 쓰신 글 :
: : : 아래와 같이 문제가 해결이 된 듯 하네요.
: : : 어제 마지막에 말씀해주신 IntToStr로 바꾸라고 하신 거 있죠?
: : : StrToInt로 바꾸니깐 char형으로 전환이 되더군요.( *(Edit5->Text.c_str())와는 달리 결과가 제대로 나옮)
: : : 제가 보기엔 어제 말씀 하실때 StrToInt를 IntToStr로 잘못 표기를 하신듯...^^ 감사합니다.
: : : 그래서 오늘 아침에 드디어 99% 정도 해결이 된 듯 한데요...
: : :
: : : 근데 딱 한가지 문제가 있는 듯....
: : :
: : : 뭐냐 하면 아래 구문에서요.........
: : : else if(Table1->FieldByName("Name")->AsString=="CCD")
: : :         TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<1);
: : : CCD항목을 한번씩 클릭을 하면 Edit5->Text값이 0부터 3까지 순차 증가하면서 바뀝니다.
: : : 그러므로 TotalData[2]에 저장되는 값은 0000 0000-> 0000 0010-> 0000 0100-> 0000 0110로 바뀌어야 하는데요.....두번째에서 세번째로 바뀔때 0000 0010->0000 0100으로 바뀌어야 하는데,
: : : 0000 0010->0000 0110로 바뀌더군요.
: : : 이유인 즉, 두번째 비트의 1값이 살아 있는상태에서 값이 바뀌는 거죠.(원래는 0이 되어야 하는데..)
: : : 그러니간 원래는 두번째 비트는 0으로 되어야 하는 거죠.
: : : 그래서 static char TotalData[3]를 char TotalData[3]으로 바꾸니 결과값이 제대로 나옵니다.
: : : 근데 이때의 문제점은 전의 결과 값이 누적이 되어야 하는데 누적이 안 된다는 거죠.
: : :
: : : 그래서 인데 혹 Edit나 함수중에서 여타 자리수를 지정해서 출력해주는 속성이 없나요?
: : : 가령 printf("%02d",i)와 같이 02로서 자리수를 지정해서 출력해 주는 속성이 있다면 될 것 같기도 한데요....^^
: : :
: : : 바쁘신데 수고스럽게 해서 죄송하구요....
: : : 좋은 하루 되세요...............그 동안 감사 했습니다........
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : : static char TotalData[3]={0,0,0};//,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
: : :                                                 // char cBaseData=Edit5->Text;
: : :            Table1->Edit();
: : :
: : :            if(Table1->TableName=="fix.db")
: : :            {
: : :                  if(strchr(Table1->FieldByName("50")->AsString.c_str(),'&'))
: : :                  {
: : :                         if(UpDown1->Position >= ( pow(2,StrToInt(Table1->FieldByName("Bit")->AsString))))
: : :                         {
: : :                                                //ShowMessage("This is FF more value. ^.^");
: : :                                                Edit5->Text=0;
: : :                                                UpDown1->Position=0;
: : :                         }
: : :                         else
: : :                         {
: : :                                     Edit5->Text=AnsiString::IntToHex(UpDown1->Position,1);
: : :                         }
: : :                                       Table1->FieldByName("50")->AsString="&H"+Edit5->Text;
: : :                  }
: : :            else
: : :            {
: : :                if(UpDown1->Position >= ( pow(2,StrToInt(Table1->FieldByName("Bit")->AsString))))
: : :                {
: : :                           Edit5->Text=0;//2^StrToInt(Table1->FieldByName("Bit")->AsString)-1;
: : :                           UpDown1->Position=0;
: : :                           if(Table1->FieldByName("Name")->AsString=="NTPAL")
: : :                                TotalData[2]=TotalData[2] & ~(1<<0);
: : :                           else if(Table1->FieldByName("Name")->AsString=="CCD")
: : :                                TotalData[2]=TotalData[2] & ~(0x03<<1);
: : :                           else if(Table1->FieldByName("Name")->AsString=="YDOUT")
: : :                                TotalData[2]=TotalData[2] & ~(1<<3);
: : :                           else if(Table1->FieldByName("Name")->AsString=="UVDOUT")
: : :                                TotalData[2]=TotalData[2] & ~(1<<4);
: : :                           else if(Table1->FieldByName("Name")->AsString=="REC601")
: : :                                TotalData[2]=TotalData[2] & ~(1<<5);
: : :                           else if(Table1->FieldByName("Name")->AsString=="DSYNC")
: : :                                TotalData[2]=TotalData[2] & ~(1<<6);
: : :                           else if(Table1->FieldByName("Name")->AsString=="SG135")
: : :                                TotalData[2]=TotalData[2] & ~(1<<7);
: : :                      }
: : :                      else
: : :                      {
: : :                                     Edit5->Text=UpDown1->Position;
: : :
: : :                           if(Table1->FieldByName("Name")->AsString=="NTPAL")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<0);
: : :                           else if(Table1->FieldByName("Name")->AsString=="CCD")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<1)
: : :                           else if(Table1->FieldByName("Name")->AsString=="YDOUT")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<3);
: : :                           else if(Table1->FieldByName("Name")->AsString=="UVDOUT")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<4);
: : :                           else if(Table1->FieldByName("Name")->AsString=="REC601")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<5);
: : :                           else if(Table1->FieldByName("Name")->AsString=="DSYNC")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<6);
: : :                           else if(Table1->FieldByName("Name")->AsString=="SG135")
: : :                                TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<7);
: : :
: : :                        }
: : :                                     Table1->FieldByName("50")->AsString=Edit5->Text;
: : :               }
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : :

+ -

관련 글 리스트
13187 비트값 출력할 때 자리수 지정해서 출력할 수 있나요?^^ heartsim 690 2001/11/28
13196     Re:비트값 출력할 때 자리수 지정해서 출력할 수 있나요?^^ 아리랑 1204 2001/11/28
13188     Re:비트값 출력할 때 자리수 지정해서 출력할 수 있나요?^^ 지나가는 사람 870 2001/11/28
13189         다시 글 올립니다.^^^^^ heartsim 648 2001/11/28
13191             Re:다시 글 올립니다.^^^^^ 지나가는 사람 686 2001/11/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.