我可以用吗bool*
以任何有意义的方式。我将如何转换bool*
to a byte
例如,或存储bool*
以一个字节为单位
我的目标是在我的项目中管理我自己的记忆,具体细节并不重要,只是我喜欢做的事情。现在我希望能够存储我自己的变量,并且我恰好需要存储一个布尔值。我怎样才能使用unsafe
and a byte*
,存储这个布尔值,并充分利用我的空间?理想情况下,在字节中存储 4 位。
在 C# 中,你通常不会使用bool*
,这是只能在不安全代码中使用的东西(这会带来很多其他东西,例如固定对象等等)。 Abool*
将是一个指向布尔值的指针。指针有 4 个字节长,无法无损地转换为字节。
您为什么要这样做以及您在哪里遇到这种情况?通常,在 C# 中使用指针并不容易,除非您有非常具体的需求(即 API 调用,但您可以使用 P/Invoke 解决)。
EDIT:(因为你编辑了你的q。)
以下代码片段向您展示了如何获取布尔变量的地址以及如何将该指针转换为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 位机器架构,否则我强烈建议您不要这样做,因为它会使检索和存储布尔值变得非常慢。但更重要的是:你在这里谈论的是 C#,而不是 C++。 C# 与 CLR 绑定,CLR 规定布尔值存储为字节,并且在 32 位体系结构中每个内存地址为 4 个字节长,这意味着指针为 4 个字节长。因此,您的问题是将 bool* (指向 bool 的指针)转换为其他内容只能转换为整数或其他四个字节宽的数据类型。
提示:使用标志可以最好地利用空间:这使得枚举类型为每个标志占用一点空间,从而为每个字节提供八个布尔值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)