gpt4 book ai didi

c# - C# 中 bool* 的用处

转载 作者:行者123 更新时间:2023-11-30 15:47:46 30 4
gpt4 key购买 nike

我能以任何有意义的方式使用 bool* 吗?例如,我如何将 bool* 转换为 byte,或者将 bool* 存储在一个字节中

我的目标是在我的一个项目中管理我自己的内存,具体细节并不重要,只是我喜欢做的事情。现在我希望能够存储我自己的变量,而我恰好需要存储一个 boolean 值。我如何使用 unsafebyte* 存储这个 boolean 值,并最好地利用我的空间?理想情况下在字节中存储 4 位。

最佳答案

在 C# 中,您通常不会使用 bool*,这是您只能在不安全代码中使用的东西(它会带来很多其他东西,例如固定对象等等)。 bool* 是指向 boolean 值的指针。指针有 4 个字节长,不能无损地转换为字节。

你为什么要这样做,你在哪里遇到的?通常,在 C# 中使用指针的用例并不容易,除非您有非常具体的需求(即 API 调用,但您可以使用 P/Invoke 解决)。

编辑:(因为您编辑了问题。)

以下代码片段向您展示了如何获取 boolean 变量的地址以及如何将该指针转换为 int(无法转换为 byte,我们需要四个字节)。

unsafe
{
// get pointer to boolean
bool* boolptr = &mybool;

// get the int ptr (not necessary though, but makes following easier)
int* intptr = (int*)boolptr;

// get value the pointer is pointing at
int myint = *intptr;

// get the address as a normal integer
int myptraddress = (int) intptr;
}

你说“理想情况下在一个字节中存储 4 位”。除非你有一个 4 位机器架构,否则我强烈建议不要使用它,因为它会使检索和存储 boolean 值变得非常慢。但更重要的是:您在这里谈论的是 C#,而不是 C++。 C# 绑定(bind)到 CLR,CLR 声明 boolean 值存储为字节,并且每个内存地址在 32 位体系结构中的长度为四个字节,这意味着指针长度为四个字节。因此,您的问题是,将 bool*(指向 bool 的指针)转换为其他内容只能转换为整数或其他四字节宽的数据类型。

提示:使用标志可以最好地利用空间:这使得枚举类型为每个标志占用一点空间,从而为每个字节提供八个 boolean 值。

关于c# - C# 中 bool* 的用处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222676/

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