2
是否可以定義一個例如60位的位數組(它不能被8整除)?是否可以定義一個自定義大小的位數組
bit_array = malloc(/*What should be here?*/)
所有我發現定義比特串像
bit_array = malloc(sizeof(long))
但這只是給32位(取決於架構)
感謝
是否可以定義一個例如60位的位數組(它不能被8整除)?是否可以定義一個自定義大小的位數組
bit_array = malloc(/*What should be here?*/)
所有我發現定義比特串像
bit_array = malloc(sizeof(long))
但這只是給32位(取決於架構)
感謝
這裏的代碼,我寫了從內部操縱位數組。在我的代碼中,我從堆棧中分配了60個字節的內存,爲您提供了480個位。然後,您可以使用setbit函數將60個字節內的任何位設置爲0或1,並使用getbit來查找某個位的值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getbit(unsigned char *bytes,int bit){
return ((bytes[(bit/8)] >> (bit % 8)) & 1);
}
void setbit(unsigned char *bytes,int bit,int val){
if (val==1){
bytes[(bit/8)] |= (1 << (bit % 8));
}else{
bytes[(bit/8)] &= ~(1 << (bit % 8));
}
}
int main(int argc, char **argv) {
unsigned char ab[60]; // value must be the ceiling of num of bits/8
memset(ab,0,60); // clear the whole array before use.
//A
setbit(ab,6,1);
setbit(ab,0,1);
//B
setbit(ab,14,1);
setbit(ab,9,1);
//C
setbit(ab,22,1);
setbit(ab,17,1);
setbit(ab,16,1);
//Change to B
setbit(ab,16,0);
printf("ab = %s\n",ab);
printf("bit 17 = %d\n",getbit(ab,17));
return 0;
}
此URL的代碼更片段位操作:
非常感謝,這真的很有幫助 –
我不這麼認爲。 'malloc'只有字節的概念。在位級別發生的是實現定義。 –
C沒有這樣的「位陣列」的概念。您可以分配字節。如果你想要7位,那麼你必須分配一個完整的字節並且只使用它的一部分。 – immibis
如果你想使用一個*字段*,它必須作爲結構的一部分來完成。 –