我正在讀取H.264比特流作爲C++中的Hex文件。我想在某些條件滿足時插入一些字符串。
像在附加圖像中,如果00 00 00 01的十六進制值出現在文件中的任何位置,我想在文件00 00 00 01之前添加一些像ABC這樣的字符串,並將其另存爲新文件。現在寫我的方法是以十六進制格式讀取h.264文件。將其轉換爲字符串並進行字符串比較。如果有辦法我可以做一個直接的十六進制比較?這裏是我當前的代碼十六進制值比較並保存到文件C++
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char x;
string s1,s2,s3;
s2="Mushahid Hussain";
s3="0000000141";
std::ifstream input("d:\\Jm\\videos\\trying2.264", std::ios::binary);
input >> std::noskipws;
while (input >> x) {
long constant = 0x0000000168;
std::ostringstream buffer;
buffer << std::hex << std::setw(2) << std::setfill('0')
<< (int)x;
s1=buffer.str();
if (s1.find(s1) != std::string::npos) {
cout<<"hello";
s1+=s2;
}
std::ofstream outfile;
outfile.open("d:\\Jm\\bin\\trying5.264", std::ios_base::app);
outfile << s1;
}
return 0;
}
編輯1
作爲回答Tommylee2k我能夠追加字符串。但問題是在文件末尾的十六進制CD值附加如附圖所示。
_'while的其餘部分(輸入>> X){'_您想要讀取二進制內容,但實際上是指文本格式的輸入。而是使用'std :: istream :: read()'來檢索文件的二進制內容。 –
@πάνταῥεῖ但不會讀取文件作爲十六進制我猜。文件h.264比特流,所以我想讀它作爲一個十六進制文件。 – james
所以你實際上在那個文件中有ASCII編碼的十六進制值? _「h.264比特流」_通常不是這樣編碼的,只是包含純二進制數據。 –