나는 char * 문자열을 가져 왔습니다. 그에 맞게 저장해야합니다. 나는 데이터 유형을 사용하는 것이 최고입니다 열거 형, 그들을 유지하려면C의 열거 형 및 문자열
이 문자열은 해당 값 {영국, GD, BD, ER, WR, FL}
중 하나가 될 수 있습니다. 6 값처럼 3 비트이면 충분하지만 C에 3 비트를 저장하는 방법은 무엇입니까?
나는 char * 문자열을 가져 왔습니다. 그에 맞게 저장해야합니다. 나는 데이터 유형을 사용하는 것이 최고입니다 열거 형, 그들을 유지하려면C의 열거 형 및 문자열
이 문자열은 해당 값 {영국, GD, BD, ER, WR, FL}
중 하나가 될 수 있습니다. 6 값처럼 3 비트이면 충분하지만 C에 3 비트를 저장하는 방법은 무엇입니까?
은 당신이 원하는 것은 Bit Field입니다 :
typedef struct {
unsigned char val : 2; //use 2 bits
unsigned char : 6; // remaining 6 bits
} valContainer;
...
valContainer x;
x.val = GD;
바이트의 정의는 메모리의 가장 작은 양이 컴퓨터가 할 수있는 한, 정말 미만 바이트를 저장하는 방법이없는 점에 유의 함 주소. 이것은 바이트의 다른 비트와 연관된 이름을 갖는 방법 일뿐입니다.
또한 물론 2 비트는 6 값 (2 비트는 4 개의 고유 한 값을 가짐)에 충분하지 않습니다. 따라서 적어도 3 비트 (8 개의 별개 값)가 필요합니다.
에릭 핀 (Eric Finn)의 대답에 따르면 비트 필드를 사용하여 3 비트의 데이터 요소를 저장할 수 있습니다. 그러나 이것은 동일한 바이트에 저장할 다른 것이있는 경우에만 유용합니다.
struct {
unsigned char value: 3;
unsigned char another: 4;
unsigned char yet_another: 5;
// 12 bits declared so far; 4 more "padding" bits are unusable
} whatever;
당신이 많은 그런 작은 요소의 배열을 저장하려면
, 각 32 비트 워드에서 10 개 요소를 응집, 예를 들어, 다른 방법으로 그것을 할 수 있습니다.int n = ...; // number of elements to store
uint32_t *data = calloc(n/10, sizeof(*data));
for (int i = 0; i < n; i++)
{
int value = read_string_and_convert_to_int();
data[i/10] &= ~(7 << (i % 10 * 3));
data[i/10] |= value << (i % 10 * 3);
}
당신은 단지 하나의 요소 (또는 몇)을 가지고 싶다면, 단지 enum
또는 int
를 사용합니다.
'value : 2'는 작동하지 않습니까? 또한 6 개의 값으로 2 비트가 충분하지 않습니다. 3이 필요합니다. –
"2 비트이면 충분합니다"... 다른 6 비트와 근본적으로 중요한 것을 할 것인가, 아니면 아무 이유없이 더 열심히 살게 할 것입니까? – Jon
여섯 가지 옵션 중 선택 사항을 2 비트로 저장하는 방법을 정확히 어떻게 제안합니까? – Kevin