Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Cplusplus Bytes schrittweise vergleichen

Frage Entwicklung C und C++

Mitglied: dempsey

dempsey (Level 1) - Jetzt verbinden

01.10.2012, aktualisiert 12:46 Uhr, 2389 Aufrufe, 1 Kommentar

2 hex dateien miteinander vergleichen

Hallo Zusammen,

ich mache gerade hier ein paar Übungen. Ich habe hier 2 Dateien, die Hex werte beinhalten. Diese beiden Dateien möchte ich miteinander byte für byte vergleichen. Sobald mein Programm merkt, hier sind 2 Bytes nicht gleich, dann soll er diese Bytes protokollieren in einer Textdatei. Ich möchte dies mit Vektoren machen! und ich bitte euch, meine Entscheidung da zu berücksichtigen. Es dient mir als Lerneffekt.

- Ich überprüfe bei beiden Dateien, ob beide, die selbe Länge haben. Wenn sie grundsätzlich verschieden sind, dann soll der Vergleichvorgang direkt abbrechen.

- Ich starte mit der Überprüfung der einzelnen Bytes und er soll das so lange machen, bis er das komplette Dokument (file2) durchgegangen ist.

Leider bekomme ich hier eine Fehlermeldung. Mein Compiler bemängelt mir, dass meine Vektor fehlerhaft ist. Ich hoffe ihr könnt mit meiner Zieldefinition was anfangen.

01.
 
02.
void main() 
03.
04.
  ifstream file1; 
05.
  ifstream file2; 
06.
 
07.
  file1.open ("file1.txt", ifstream::binary); 
08.
  file2.open ("file2.txt", ifstream::binary); 
09.
 
10.
  vector<uint8_t> v_f1(2); 
11.
  vector<uint8_t> v_f2(2); 
12.
 
13.
  while(!file2.eof()) 
14.
15.
      file1.read((char*)&v_f1[0], 2); 
16.
      file2.read((char*)&v_f2[0], 2); 
17.
   
18.
      uint8_t arg1 = v_f1[0]; 
19.
      uint8_t arg2 = v_f2[0]; 
20.
 
21.
      uint16_t check_length = (*(uint16_t*)(&v_f1[0])); 
22.
      uint16_t ref_length = (*(uint16_t*)(&v_f2[0])); 
23.
 
24.
      if(check_length == ref_length) 
25.
26.
		  v_f1.resize(check_length); 
27.
		  v_f2.resize(ref_length); 
28.
 
29.
		  file1.read((char*)&v_f1[0], f1_length); 
30.
		  file2.read((char*)&v_f2[0], f2_length); 
31.
 
32.
		  int i; 
33.
		  int counter1 = 0; 
34.
		  int counter2 = 0; 
35.
 
36.
		  fstream stream; 
37.
		  stream.open("test.txt", ios::out); 
38.
			 
39.
	  for(i = 0; i < f2_length; i++) 
40.
41.
	      if(v_f1[i] == v_f2[i]) 
42.
43.
			counter1++; 
44.
45.
	      else 
46.
47.
			  counter2++; 
48.
 
49.
			  stream << setw(2) << setfill('0') << hex << (int)v_f2[i] << "   Vergleiche mit   "; 
50.
			  stream << setw(2) << setfill('0') << hex << (int)v_f1[i] <<  "	     Falsch  " << endl; 
51.
52.
53.
	  stream.close(); 
54.
55.
      else 
56.
57.
		  cout << "Dateien sind grundsätzlich unterschiedlich" << endl; 
58.
59.
60.
61.
 
Mitglied: chfr77
10.12.2012 um 11:44 Uhr
Ich habe Deinen Code mal etwas verfeinert, damit es eher auf unterschiedlichen Systemen kompiliert. Bei mir läuft das einwandfrei durch. Probier das mal bitte aus und schreib genauer was nicht funktioniert.

01.
#include <string> 
02.
#include <vector> 
03.
#include <fstream> 
04.
#include <iostream> 
05.
#include <iomanip> 
06.
 
07.
typedef unsigned char uint8_t; 
08.
typedef unsigned short uint16_t; 
09.
int main(int argc, char* argv[]) 
10.
11.
	using namespace std; 
12.
	if (argc != 3) 
13.
		cout << "Aufruf mit " << argv[0] << " [DATEI1] [DATEI2]" << endl; 
14.
 
15.
	ifstream file1; 
16.
	ifstream file2; 
17.
 
18.
	file1.open (argv[1], ifstream::binary); 
19.
	if (!file1.good()) 
20.
		cout << "Datei '" << argv[1] << "' laesst sich nicht oeffnen." << endl; 
21.
	file2.open (argv[2], ifstream::binary); 
22.
	if (!file2.good()) 
23.
		cout << "Datei '" << argv[2] << "' laesst sich nicht oeffnen." << endl; 
24.
 
25.
	file1.seekg(0, ios::end);file2.seekg(0, ios::end); 
26.
	ifstream::pos_type f1_length = file1.tellg(); 
27.
	ifstream::pos_type f2_length = file2.tellg(); 
28.
	file1.seekg(0); file2.seekg(0); 
29.
 
30.
 
31.
	vector<uint8_t> v_f1(2); 
32.
	vector<uint8_t> v_f2(2); 
33.
 
34.
	while(!file2.eof()) 
35.
36.
		file1.read((char*)&v_f1[0], 2); 
37.
		file2.read((char*)&v_f2[0], 2); 
38.
 
39.
 
40.
 
41.
		uint8_t arg1 = v_f1[0]; 
42.
		uint8_t arg2 = v_f2[0]; 
43.
 
44.
		uint16_t check_length = (*(uint16_t*)(&v_f1[0])); 
45.
		uint16_t ref_length = (*(uint16_t*)(&v_f2[0])); 
46.
 
47.
		if(check_length == ref_length) 
48.
49.
			v_f1.resize(check_length); 
50.
			v_f2.resize(ref_length); 
51.
 
52.
			file1.read((char*)&v_f1[0], f1_length); 
53.
			file2.read((char*)&v_f2[0], f2_length); 
54.
 
55.
			int i; 
56.
			int counter1 = 0; 
57.
			int counter2 = 0; 
58.
 
59.
			fstream stream; 
60.
			stream.open("test.txt", ios::out); 
61.
 
62.
			for(i = 0; i < f2_length; i++) 
63.
64.
				if(v_f1[i] == v_f2[i]) 
65.
66.
					counter1++; 
67.
68.
				else 
69.
70.
					counter2++; 
71.
 
72.
					stream << setw(2) << setfill('0') << hex << (int)v_f2[i] << "   Vergleiche mit   "; 
73.
					stream << setw(2) << setfill('0') << hex << (int)v_f1[i] <<  "	     Falsch  " << endl; 
74.
75.
76.
			stream.close(); 
77.
78.
		else 
79.
80.
			cout << "Dateien sind grundsätzlich unterschiedlich" << endl; 
81.
			return 2; 
82.
83.
84.
	return 0; 
85.
}
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - 2 Arrays vergleichen und gleiche Einträge verbinden (6)

Frage von internet2107 zum Thema Batch & Shell ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen (3)

Frage von s0m3ting zum Thema Windows Server ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (32)

Frage von Maik82 zum Thema Linux Netzwerk ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...

CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (20)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (14)

Frage von smartino zum Thema Mac OS X ...