如何在C中构造一个可变长度的Bitstring

时间:2015-11-28 11:12:31

标签: c arrays bits

我想在C中编写一个函数rand_bit_string(int k, int n),它生成一个长度为n的随机位串,其中包含k个。

我的问题是,如何设计一个表示长度为n的位串的数据结构。 C中最小的数据类型是char,其中包含8位。所以我想回一个指向char数组的第一个元素的char指针。数组的大小必须是n/sizeof(char)的上限。

1 个答案:

答案 0 :(得分:1)

sizeof(char)始终为1,因此将n除以它将无效。

char中的分配大小可以计算为(n+7)/8。在执行整数除法之前将7添加到n可确保在n不能被8整除的情况下有足够的空间。

就返回值而言,您可以返回char*,但调用者需要保持他们通过的n与他们返回的char*之间的连接。或者,您可以创建struct以将两者保持在一起:

struct bit_sequence {
    char *bits;
    size_t n;
};

您还可以添加用于访问bit_sequence位的函数,例如

int get_bit(bit_sequence *seq, size_t index) {
    if (index > seq->n) {
        // Report an error
    }
    size_t pos = index / 8;
    size_t bit = index % 8;
    return 1 & ((seq->bits[pos]) >> bit);
}