我正在使用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字段的值?
答案 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。但是,看起来规范已经为您提供了将字节设置为0x24
和0xA4
的值,因此您可以直接使用这些值。