如何在C#中声明和设置位变量的值?

时间:2011-07-27 17:54:02

标签: c# variables byte declaration bit

我正在使用C#在Windows Media Http流协议(WMSP)中建立流式视频服务器。我读过WMSP规范。在将数据包的框架标题为$ H时,$ D ...有2个字段:

B(1位):1位标志。如果在发送此数据包后立即发送下一个数据包,则该标志应该设置为1。在这种情况下,“立即”意味着服务器不会故意在两个分组的传输之间引入延迟(例如起搏延迟)。在所有其他情况下,标志必须是0. 56

帧(7位):7位字段。该字段必须具有值0x24。 (如果B和Frame字段被视为单个字节,则当B字段为0时,该字节的值将为0x24;当B字段为1时,该字节的值将为0xA4。)

当C#中的最小数据类型为字节时,该2字段的数据类型为位。那么,如何声明和设置这个2字段的值?

4 个答案:

答案 0 :(得分:3)

你可以使用一些C风格的位操作技术:

byte data = 0;
data |= (0x1 << 7) & 0xFF; // set the 8th bit of data
data |= 0x24;
Console.WriteLine(data.ToString("x")); // outputs 'a4'

但由于这两种情况只有两种:0xA4,0x24。直接使用这些常量可能是个好主意。

答案 1 :(得分:1)

只需有效地一次为两个字段分配值(因为它们一起形成一个字节用于发送):

byte headerByte = (sendImmediately) ? 0xA4 : 0x24;

没有必要单独处理它们或进行任何按位计算,因为您知道只有两个可能的值。

答案 2 :(得分:0)

使用按位运算来打开/关闭它们,这里是一个或将根据firstBitShouldBeSet布尔值的三元评估打开它。

yourFrameByte = firstBitShouldBeSet ? yourFrameByte | 0x80 : yourFrameByte;

答案 3 :(得分:0)

您可以声明一个字节,然后在字节中设置位。字节的高位将是您的字段1,字节的低7位将是您的字段2.

如果你想在C#中看到一些位操作操作,你可以查看this SO question。但是,看起来规范已经为您提供了将字节设置为0x240xA4的值,因此您可以直接使用这些值。