.NET Micro Framework 的 BitArray 替代方案

发布于 2024-09-30 15:15:53 字数 250 浏览 7 评论 0原文

.NET Micro Framework 是否有 BitArray 替代方案? 我正在考虑简单地使用 bool[],但是如何将其转换回来 变成一个字节[]?

在完整的框架中,考虑到“bits”是一个 BitArray,以下工作:

byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);

但我似乎无法在微框架中找到 BitArray 类

Is there a BitArray alternative for the .NET Micro Framework?
I was thinking about simply using a bool[], but how can you convert it back
into a byte[] ?

In the full framework, considering "bits" is a BitArray, the following works:

byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);

But I cannot seem to find the BitArray class in the micro framework

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一紙繁鸢 2024-10-07 15:15:54

您可以在 802.15.4 堆栈中找到 BitArray 实现。只需在移植套件中搜索 BitArray.cs

You can find a BitArray Implementation in the 802.15.4 Stack. Just search the Porting Kit for BitArray.cs

思慕 2024-10-07 15:15:54

我上传了 .net 微框架的数组:

http://code.tinyclr.com/project /310/bitarray-class/

希望这有帮助。

I uploaded an array for .net microframework:

http://code.tinyclr.com/project/310/bitarray-class/

Hope this helps.

幸福%小乖 2024-10-07 15:15:53

复制 BitArray 的功能并不是非常困难。首先,如果您需要少于 65 位,那么您可以使用 long 或更小的值来实现。

设置单个位:

void Set(ref long ba, int bit)
{
    ba |= 1L << bit;
}

清除位:

void Clear(ref long ba, int bit)
{
    long mask = 1L << bit;
    mask = ~mask;
    ba &= mask;
}

查看是否设置了位:

bool IsSet(long ba, int bit)
{
    long mask = 1L << bit;
    return (ba & mask) != 0;
}

如果超过 64 位,则需要创建一个数组(可能是 byte[]) ,然后进行除法以确定要修改的字节/位。只要将 long 更改为 byte,上述方法就可以工作。

例如,如果您有:

byte[] myBytes = new byte[128];

您有 1024 位。

设置位:

void Set (int bit)
{
    int byte = bit/8;
    int bitIndex = bit%8;
    myBytes[byte] |= (byte)(1 << bitIndex);
}

其他方法使用相同的数学来获取字节和位索引,并且设置、清除和测试位与上面的 long 示例相同。

It's not terribly difficult to duplicate the functionality of BitArray. First, if you need fewer than 65 bits, then you can do it with a long or smaller.

To set an individual bit:

void Set(ref long ba, int bit)
{
    ba |= 1L << bit;
}

To clear a bit:

void Clear(ref long ba, int bit)
{
    long mask = 1L << bit;
    mask = ~mask;
    ba &= mask;
}

To see if a bit is set:

bool IsSet(long ba, int bit)
{
    long mask = 1L << bit;
    return (ba & mask) != 0;
}

If you have more than 64 bits, then you'll need to create an array (byte[], probably), and do the division to determine which byte/bit you want to modify. The methods above will work, provided you change the long to byte.

For example, if you have:

byte[] myBytes = new byte[128];

You have 1024 bits.

To set a bit:

void Set (int bit)
{
    int byte = bit/8;
    int bitIndex = bit%8;
    myBytes[byte] |= (byte)(1 << bitIndex);
}

The other methods use the same math to get the byte and bit index, and setting, clearing, and testing a bit is the same as with the long example above.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文