【问题标题】:byte-array as bitfield in C#?字节数组作为 C# 中的位域?
【发布时间】:2011-01-21 16:28:57
【问题描述】:

.NET 中是否有内置类或其他东西可以让我将字节数组视为大位域?

【问题讨论】:

    标签: c# .net bit-fields


    【解决方案1】:

    看看BitArray 类。

    这是一个解释使用字节数组时发生了什么的示例:

    byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
    BitArray myBA3 = new BitArray( myBytes );
    
    Console.WriteLine( "myBA3" );
    Console.WriteLine( "   Count:    {0}", myBA3.Count );
    Console.WriteLine( "   Length:   {0}", myBA3.Length );
    Console.WriteLine( "   Values:" );
    PrintValues( myBA3, 8 );
    
    public static void PrintValues( IEnumerable myList, int myWidth )
    {
       int i = myWidth;
       foreach ( Object obj in myList )
       {
          if ( i <= 0 )
          {
             i = myWidth;
             Console.WriteLine();
          }
          i--;
          Console.Write( "{0,8}", obj );
       }
       Console.WriteLine();
    }
    

    此代码产生以下输出。

     myBA3
        Count:    40
        Length:   40
        Values:
         Bit0   Bit1    Bit2    Bit3    Bit4    Bit5    Bit6    Bit7
         True   False   False   False   False   False   False   False
         Bit8   Bit9    Bit10   Bit11   Bit12   Bit13   Bit14   Bit15 ... and so on
        False    True   False   False   False   False   False   False
         True    True   False   False   False   False   False   False
        False   False    True   False   False   False   False   False
         True   False    True   False   False   False   False   False
    

    【讨论】:

    • 是的,我尝试过使用它,但它似乎在内部处理了一些时髦的东西,比如它正在反转字节序之类的......
    • @Anon - 您可以使用 BitArray 类发布另一个问题,包括当前测试和意外结果。
    • @Anon:我认为BitArray 在内部使用int[] 数组,但我不确定您如何知道或关心它使用什么字节序。当然,从语义的角度来看,它只是 bool 的数组。
    • Console.WriteLine(new BitArray(new byte[] { 1 }).Get(0)); 打印“True”表示(?)它存储字节在大端...
    • 你对它的所作所为感到困惑。那就是“创建一个第一个字节值为1的字节数组”。 BitArray 获取该字节并说,ok 值 1 表示设置了位零(真)。第 1 位是假的,第 2 位是假的……第 7 位是假的。如果你想创建一个只有一个字节的空 BitArray,请执行以下操作:System.Diagnostics.Trace.WriteLine(new BitArray(new byte[1] { 0 }).Get(0));
    猜你喜欢
    • 2010-12-18
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多