gpt4 book ai didi

我可以在 C 中分配特定数量的位数吗?

转载 作者:太空狗 更新时间:2023-10-29 16:45:32 26 4
gpt4 key购买 nike

我正在尝试存储大量在运行时确定的 bool 信息。我想知道最好的方法是什么。

我目前一直在尝试使用以下方式分配内存:

pStatus = malloc((<number of data points>/8) + 1);

认为这将给我足够的位来使用。然后我可以使用数组表示法中的指针引用每个 bool 值:

pStatus[element]

不幸的是,这似乎效果不佳。首先,我很难将内存初始化为整数值 0 .这可以使用 memset() 来完成吗? ?不过,我认为这不会影响我在尝试访问 pStatus[element] 时崩溃的原因。 .

我也不完全相信这种方法是最好的方法。我真正想要的本质上是一个反射(reflect) bool 值状态的巨大位掩码。我错过了什么吗?

最佳答案

pStatus = malloc((<number of data points>/8) + 1);

这确实为您的位分配了足够的字节。然而,

pStatus[element]

这访问元素的第 字节,而不是位。因此,当元素超过总位数的八分之一时,您将访问已分配数组的末尾。

我会定义一些辅助函数

int get_bit(int element)
{
uint byte_index = element/8;
uint bit_index = element % 8;
uint bit_mask = ( 1 << bit_index);

return ((pStatus[byte_index] & bit_mask) != 0);
}

void set_bit (int element)
{
uint byte_index = element/8;
uint bit_index = element % 8;
uint bit_mask = ( 1 << bit_index);

pStatus[byte_index] |= bit_mask);
}

void clear_bit (int element)
{
uint byte_index = element/8;
uint bit_index = element % 8;
uint bit_mask = ( 1 << bit_index);

pStatus[byte_index] &= ~bit_mask;
}

(为清楚起见,省略了元素范围的错误检查。您也可以制作此宏)

关于我可以在 C 中分配特定数量的位数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com