gpt4 book ai didi

c# - 从字节数组中读取位范围

转载 作者:太空狗 更新时间:2023-10-29 20:10:46 24 4
gpt4 key购买 nike

我正在寻找一种方法,使我能够获得一定范围的位。例如,如果我有二进制数据

0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 (2 个字节)

我可能需要从第 3 位到第 9 位获取数据。换句话说,我会对:

0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1

所以简而言之,我想构建这个方法:

 byte[] Read(byte[] data, int left, int right){ 

// implementation
}

所以如果我传递数据 new byte[]{91,215}, 3, 9我会得到 byte[]{122} (注意字节 91 和 215 = 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 和字节 122 = 1 1 1 1 0 1 0 与示例相同的二进制数据。

如果我可以使用 << 就好了字节数组上的运算符,例如:

  byte[] myArray = new byte[] { 1, 2, 3 };
var shift = myArray << 2;

如果您有兴趣知道我为什么需要此功能:

我正在板上创建一个项目,经常需要在内存中读取和写入值。 cdf、sfr 或 ddf(称为芯片定义文件)包含有关特定芯片的信息。该文件可能如下所示:

;     Name                            Zone      Address     Bytesize  Displaybase Bitrange
; ---- ---- ------- -------- ----------- --------

sfr = "SPI0_CONTROL" , "Memory", 0x40001000, 4, base=16
sfr = "SPI0_CONTROL.SPH" , "Memory", 0x40001000, 4, base=16, bitRange=25-25
sfr = "SPI0_CONTROL.SPO" , "Memory", 0x40001000, 4, base=16, bitRange=24-24
sfr = "SPI0_CONTROL.TXRXDFCOUNT" , "Memory", 0x40001000, 4, base=16, bitRange=8-23
sfr = "SPI0_CONTROL.INT_TXUR" , "Memory", 0x40001000, 4, base=16, bitRange=7-7
sfr = "SPI0_CONTROL.INT_RXOVF" , "Memory", 0x40001000, 4, base=16, bitRange=6-6

因为我正在读取大量变量(有时每秒读取 80 次),所以我希望有一个高效的算法。我想我的方法是,如果字节大小是 8,那么我将从这 8 个字节创建一个 long,然后使用 <<>>运营商为了得到我需要的东西。如果字节大小为 4,那么我将创建一个 int 并使用 <<>>运营商,但如果我需要读取 16 个字节,我将如何做呢? 我想我的问题应该是如何实现 <<>>自定义结构类型的运算符。

最佳答案

您需要 BitArray来自 System.Collections 的类。

关于c# - 从字节数组中读取位范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608768/

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