我有這個文件稱爲ab.exe它包含這個十六進制C++ CLI從沒有工作文件比較十六進制字節
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BBAAE8CAFDFFFF83C408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054AAE8CAFDFFFF83C40800000000000000000000000000000000000000000000000000000000000000000000000000AAE8CAFDFFFF83C4088D0000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000
我有這個代碼在C++中假設檢測一個十六進制字符串是否在文件中,如果它將它添加到列表框中。
array<Byte>^ target1 = { 0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08,0x8D };
array<Byte>^ target2 = { 0x54,0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08 };
array<Byte>^ target3 = { 0xBB,0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08 };
int matched1 = 0;
int matched2 = 0;
int matched3 = 0;
FileStream^ fs2 = gcnew FileStream(line, FileMode::Open, FileAccess::Read, FileShare::ReadWrite);
int value;
do
{
value = fs2->ReadByte();
if (value == target1[matched1]) {
matched1++;
}
else
matched1 = 0;
if (value == target2[matched2]) {
matched2++;
}
else
matched2 = 0;
if (value == target3[matched3]) {
matched3++;
}
else
matched3 = 0;
if(matched1 == target1->Length)
{
listBox1->Items->Add(line + "1");
}
if(matched2 == target2->Length)
{
listBox1->Items->Add(line + "2");
}
if(matched3 == target3->Length)
{
listBox1->Items->Add(line + "3");
}
} while (value != -1);
fs2->Close();
的問題是,它不僅增加了線+ 3到列表框,而不是線+ 1或線路+ 2到列表框中
我不知道爲什麼,就是因爲所有3字符串在文件中,所以它們都應該被添加到列表框中。出於某種原因,只有最後一個被添加,因爲我嘗試了只有2和第二個被添加。有人告訴我爲什麼他們沒有被添加到列表框。 感謝
UPDATE1
玩了一些它不是被每次添加的最後一個目標後,這是一個看起來被添加在文件中的第一個字符串。我使用消息框介紹了該程序,發生了什麼可以說是54AAE8CAFDFFFF83C408是出現在文件中的第一個字符串,然後會添加第2行,但由於某種原因,所有3的匹配整數停止計數,它們只是= 0文件的其餘部分。有人可以向我解釋爲什麼是這樣以及如何解決它。
UPDATE2
這裏是答案的問題。我需要做的只是添加一個匹配= 0;每次添加到列表框命令後。
listBox1->Items->Add(line + "1");
matched1 = 0;
listBox1->Items->Add(line + "2");
matched2 = 0;
listBox1->Items->Add(line + "3");
matched3 = 0;
可以請你解釋如何解決它。我也加了一個更新的問題 – patchariadog 2013-04-20 13:21:09
沒關係我想通了 – patchariadog 2013-04-20 13:38:48
看到我的更新:只需重置計數器 – 2013-04-20 13:38:54