2013-05-03 4 views
1

"비트 맵"을 사용하면 64 와이드가됩니다. 바이트 당 8 비트를 의미합니다. 0000 0000 그리고 두 번째 비트 인 0100 0000을 활성화하려고한다고 가정 해 봅시다.비트 배열 내의 값 변경

나는 memcpy를 사용하여 부호없는 char의 배열을 만들려고 시도했다.

memcpy(bitmap[2], 1, sizeof(1)); 

심지어 서명되지 않은 char 변수에서 1을 선언하려고했습니다.

unsigned char bit = 1; 
memcpy(bitmap[2], bit, sizeof(bit)); 

나는 strcpy를 늘이 경우 아무것도 해결할 것을 알고 방어 적이기는 하나 분명히, 확실히이 할 수있는 적절한 방법이 해결되지 않습니다. 나는 당신이 볼 수있는 C 전문가가 아니야.

어쩌면 내가 이런 식으로 배열 내부의 값을 변경하려고해서는 안됩니까?

+0

''bitmap '은 64 와이드 - 64 * 비트 * 와이드라고 할 수 있습니까? 그래서 8 바이트? 그것은 하나의 '길다'또는 8 문자의 배열입니까? – Mike

+0

@Mike 예 8 바이트, 지금은 바이트로 사용하지 않을 것입니다. 단지 변경하고자하는 위치를 말할 수 있어야하고 비트 맵을 변경해야합니다. 이 비트 맵은 서명되지 않은 문자의 배열입니다. –

답변

1

(bitmap[0]을)의이 비트 맵은 그

unsigned char bitmap[8] = {0}; 

같다고 가정하자 당신은 당신의 bitmap 배열의 첫 번째 바이트의 (왼쪽부터) 두 번째 비트를 활성화하려면 :

bitmap[0] = 1U<<6; 

bitmap[0] 바이너리 프레젠테이션은 0100 0000

EDIT

bitmap[i]은 8 비트 크기입니다.

bitmap[0] = 1<<6; // means 1 shifted to the left with 6 steps 


            1<<0 
0 0 0 0 0 0 0 1 

          1<<1 
0 0 0 0 0 0 1 0 

         1<<2 
0 0 0 0 0 1 0 0 

        1<<3 
0 0 0 0 1 0 0 0 

...... 

    1<<6 
0 1 0 0 0 0 0 0 
+0

제게이 작품이 어떻게 작동하는지 설명해 주시겠습니까? 나는 그것을 코드에 던지기를 원하지 않습니다. 배우고 싶습니다. 오른쪽에서 왼쪽으로 여섯 집을 삽입 할 것이라고 가정합니다. –

+0

@DiogoAlexandre 대답 업데이트 – MOHAMED

+0

감사 :] 나는 그것을 내 코드에 시도 할 것이다. –