2017-01-05 2 views
0

Je souhaite créer une classe représentant un MPEG 2 Transport Stream packet. Je veux avoir une propriété de classe qui stocke la valeur PID de 13 bits? Quel serait le meilleur type de données? Voulez-vous utiliser un masque pour stocker cette valeur? Je pense que je devrais juste convertir la valeur à un int ... ce serait la solution la plus facile à droite? Comment stockez-vous différents nombres de bits qui ne sont pas un octet?Comment stocker la structure 13 bits?

public class Mpeg2TransportPacket 
{ 
    byte SyncByte { get; set; } 
    bool TransportErrorIndicator { get; set; } 
    bool PayloadUnitStartIndicator { get; set; } 
    bool TransportPriority { get; set; } 

    int PID { get; set; } 
} 
+1

A 'byte' est de 8 bits, un' short' ('Int16') est de 16 bits. Vous pouvez utiliser un 'short', avec 3 bits de réserve. – Amy

+1

Je le convertirais en 'short'. –

+0

Attendez jusqu'à ce que vous obteniez les pts de 33bit stockés dans 6 octets :) – szatmary

Répondre

3

Pour une seule valeur comme ça, je pense que System.Int16 serait bien.

Si vous avez besoin pour masquer 13 bits que vous utilisez un masque et & opération

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 
0

Je stocker le PID dans une classe BitArray puis mapper chaque propriété booléenne de votre classe d'écriture/lecture de cette classe

Pour de meilleures performances, utilisez BitVector32.