如何存储13位结构?
How to store 13-bit structure?
我想创建一个代表 MPEG 2 Transport Stream packet 的 class。我想要一个存储 13 位 PID 值的 class 属性?最好的数据类型是什么?你会用掩码来存储这个值吗?我在想我应该将值转换为 int ...那将是最简单的解决方案,对吧?如何存储不是字节的不同位数?
public class Mpeg2TransportPacket
{
byte SyncByte { get; set; }
bool TransportErrorIndicator { get; set; }
bool PayloadUnitStartIndicator { get; set; }
bool TransportPriority { get; set; }
int PID { get; set; }
}
我会将 PID 存储到 BitArray class 中,然后将 class 的每个布尔值 属性 从这样的 [=17] 映射到 write/read =]
为了获得更好的性能,请使用 BitVector32。
对于这样的单个值,我认为 System.Int16 会很好。
如果您需要屏蔽掉 13 位,您将使用屏蔽和 & 操作
var mask = 0b0001_1111_1111_1111; // c# v7.0 binary literal, low order bits
var pid = value & mask; // value is what you are applying the mask to
我想创建一个代表 MPEG 2 Transport Stream packet 的 class。我想要一个存储 13 位 PID 值的 class 属性?最好的数据类型是什么?你会用掩码来存储这个值吗?我在想我应该将值转换为 int ...那将是最简单的解决方案,对吧?如何存储不是字节的不同位数?
public class Mpeg2TransportPacket
{
byte SyncByte { get; set; }
bool TransportErrorIndicator { get; set; }
bool PayloadUnitStartIndicator { get; set; }
bool TransportPriority { get; set; }
int PID { get; set; }
}
我会将 PID 存储到 BitArray class 中,然后将 class 的每个布尔值 属性 从这样的 [=17] 映射到 write/read =]
为了获得更好的性能,请使用 BitVector32。
对于这样的单个值,我认为 System.Int16 会很好。
如果您需要屏蔽掉 13 位,您将使用屏蔽和 & 操作
var mask = 0b0001_1111_1111_1111; // c# v7.0 binary literal, low order bits
var pid = value & mask; // value is what you are applying the mask to