답변 주셔서 정말 감사합니다!!! ^^
아.. 그런데 제가 질문 내용을 너무 간단히 생각해서 짧게 적었나봐요....
쉽게 생각해서 금방 될줄 알고 ㅎㅎ.. 충분한 설명 못드려서 죄송합니다 ㅠ;;
제가 하고 싶은 것은 이런 건데요.....
통신에 있어서 각 비트 마다 정해진 프로토콜이 정해 있을 겁니다...
그래서 쉽게 그 값을 파악하기 위해 구조체 안에 uint8_t a:1;와 같은 경우를 쓰잔아요..
그런데 문제는 배열을 써버리게 되면 그 비트 값이 어떤 내용인지 알기가 힘듭니다...
그래서 각 비트에 uint8_t flag:1;, uint8_t update:1;, uint8_t checksum:1;... 등 변수명을 주어 그 비트를 쉽게
값도 파악 하고 제어 할 수 있는데요.... 그런데 제가 하려는 것은 구조체에 모든 비트 출력해야 합니다.
즉... 프로그램에서 구조체의 각 비트들이 0인지 1인지 보여 주어야 하는데요.. 또한 그 비트를
한, 두개 값을 변경 시켜야 합니다. 그려려면...
----------------------------------------------------------------------------------------
1. 그 구조체의 모든 비트 값을 파악하여 출력해야하구요...
2. 구조체의 각 비트를 쉽게 제어하기 위해 변수명을 지정해야 합니다....
----------------------------------------------------------------------------------------
변수명으로 모든 비트를 출력하려니 코드가 너무 길어지구여....
출력을 위해 모든 값을 배열에 넣고 하려니 나중에 비트 제어하기에 힘들어지구여...
그래서 처음엔 구조체를 비트 연산으로 0인지 1인지 출력하고 구조체 변수명을 통해 비트를 제어하려고 했는데요...
구조체가 비트 연산자이 안되는 바람에 여기서 부터 문제가 생긴겁니다....
음... 충분한 설명이 되었나 모르겠네요;;; 뭔가 갑자기 복잡해진듯 ㅎㅎ;;
해결 할 수 있는 방법이 있을까요??? 음.. 어째든 답변 주셔서 감사합니다 ^^
장성호 님이 쓰신 글 :
: 제가 질문을 잘 이해하지 못한듯 하네요
:
: 한번에 본다는것이 비트가 아니라 Byte단위로 보고싶다는 뜻인줄 이해했었습니다.
:
: 님께서 원하는 방식처럼 for문 즉 배열로 접근하려면
: 다음과 같이 operator 오버라이딩 하시면 됩니다.
:
:
: struct ST_DATA
: {
: Byte Data[12];
: //Operator 를 만들어 두시구요
: int operator[](int index)
: {
: int iByte=index/8;
: int iBit=index%8;
: return (Data[iByte]>>iBit)&0x01;
: }
: };
: //------------------------------------------------
: void __fastcall TForm8::Button1Click(TObject *Sender)
: {
: ST_DATA st;
:
: st.Data[0]=0xff;
: st.Data[1]=0x88;
: st.Data[2]=0xAA;
: st.Data[3]=0x55;
: for(int i=0;i<32;i++)
: {
: //다음과 같이 배열로 접근이 됩니다.
: Memo1->Lines->Add(st[i]);
: }
: }
:
:
: 그럼..