Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用自定义值创建原始mpeg标头_C++_Mpeg - Fatal编程技术网

C++ 如何使用自定义值创建原始mpeg标头

C++ 如何使用自定义值创建原始mpeg标头,c++,mpeg,C++,Mpeg,我正在尝试使用c++创建mpeg标头: 标题十六进制值:0X4700311d 所以同步字节是:0x47 tei:0 普西:0 优先级:0 pid:0x0031 tsc:0x0 自动售检票机:0x1 抄送:13 mpeg头的结构应该是什么样的 有没有一种方法可以创建一个4字节的字符数组,然后根据头分配值,如果我想的话,以后再修改pid 我已尝试使用此标题: unsigned char _syncByte; unsigned char _tei : 1; unsigned char _payload

我正在尝试使用c++创建mpeg标头: 标题十六进制值:0X4700311d 所以同步字节是:0x47 tei:0 普西:0 优先级:0 pid:0x0031 tsc:0x0 自动售检票机:0x1 抄送:13

mpeg头的结构应该是什么样的

有没有一种方法可以创建一个4字节的字符数组,然后根据头分配值,如果我想的话,以后再修改pid

我已尝试使用此标题:

unsigned char _syncByte;
unsigned char _tei : 1;
unsigned char _payloadStart : 1;
unsigned char _priority : 1;
int16_t _pid;
unsigned char _scramblingCtl : 2;
unsigned char _adaptationField : 2;
unsigned  char _counter;
但在visual studio 2015内存面板中,值是不同的。

uint32\u t header=0;
uint32_t header = 0;
header |= 0x47 << 24;
header |= (TransportErrorIndicator & 1) << 23;
header |= (PayloadUnitStartIndicator  & 1) << 22;
header |= (TransportPriority & 1) << 21;
header |= (PacketIdentifier & 8191) << 8;
header |= (TransportScrambling & 3) << 6;
header |= (AdaptationFieldControl & 3) << 4;
header |= (ContinuityCounter & 15);

header |=0x47如果希望裸结构执行此操作,则需要注意依赖于编译器的结构填充。我建议您采取不同的做法:创建一个包含整数和布尔值的结构,用于设置,并创建一个函数,该函数将返回相应的mpeg头。如果同步字节为8位,后跟3位标志,后跟16位pid,然后,同步字节
0x47
和pid
0x0031
不可能产生以
0x470031
开头的头-中间应该有三位。@user1316208感谢您的回复,我不熟悉这个位,头的长度是4个字节,如果我用bool和整数创建一个结构,那么结构大小将超过4个字节。是的,结构大小将不同。关键是,您将编写一个函数,该函数采用这种组织清晰的结构,并将其值打包到例如
std::bitset
char[4]
或类似的文件中。建议放弃创建一个大小正好为4字节且包含所有值的
struct
。@MaxLanghof感谢您的回复,那么如何设置值,sync byte应始终为0x47,pid(例如)将为31,如何设置标头中的所有值?