제가 질문을 잘 이해하지 못한듯 하네요
한번에 본다는것이 비트가 아니라 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]);
}
}
그럼..
님이 쓰신 글 :
: 답변 감사합니다~~~ ^^ 몰랐던 방법이네요 ㅎㅎ..
:
: 그런데 여전히 비트 방식으로는 어떻게 접근을 해야 할지 모르겠어요 ㅠㅠ..
:
: 예를 들어 100개의 비트 값이 있다면...현재 구조체는
:
: ST_Data.Bit.a, ST_Data.Bit.b, ST_Data.Bit.c, ST_Data.Bit.d.... 이런식으로 접근해야 하잔아요...
:
: 그런데 제가 원하는 접근 방식은 비트연산자 처럼
:
: for(int i = 0; i < 100; i++)
: {
: Memo1->Lines->Add((ST_Data.Bit & (0x01 << i));
: }
:
: 한번에 구조체에 있는 100개의 비트 값을 읽어 올수 있는 방법은 없나요???
:
: 다시한번 답변 부탁드립니다 ^^;;
:
: 장성호 님이 쓰신 글 :
: : 공용체를 쓰세요
: :
: :
: : struct ST_BITDATA
: : {
: : Byte a:1;
: : Byte b:1;
: : Byte c:1;
: : };
: :
: : struct ST_DATA
: : {
: : union
: : {
: : Byte Data;
: : ST_BITDATA Bit;
: : };
: : };
: :
: :
: : 위와같이 하면
: : 1Byte(바이트)씩 보려면 ST_DATA.Data로 접근하면 되고
: : 1Bit(비트)씩 보려면 ST_Data.Bit.a; 이런식으로 접근하면 됩니다.
: :
: : 그럼..
: :
: : 구조체 님이 쓰신 글 :
: : : 통신을 이용해 각각의 비트 값을 저장 하여 확인하고 있는데요...
: : :
: : : 다름이 아니라 구조체에 값을 빠르게 확인할 방법이 없어서요...
: : :
: : : struct TEST{
: : : uint8_t a: 1;
: : : uint8_t b: 1;
: : : }test;
: : :
: : : test 라는 구조체가 있다고 합시다..
: : :
: : : 이 test 구조체에 a와 b의 값이 0인지 1인지 알고 싶습니다...
: : :
: : : 그런데 저런게 100개가 있다고 하면 코드상 test.a, test.b.... 이런식으로 하면 너무 길어지잔아요..
: : :
: : : 그래서 test 구조체의 0비트부터 100비트까지 간단하고 빠르게 값을 확인 할 수 있는 방법이 있을까요??
: : :
: : : 많은 조언 부탁드립니다 ㅠㅠ;;