Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 2415 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 ..
Ähnliche Inhalte
Linux
gelöst Vergleich zwischen Distributionen. Mögliche Kriterien? (18)

Frage von hansleitner zum Thema Linux ...

Grafikkarten & Monitore
Grafikkarten Vergleich & Grafikkarten Rangliste

Link von joemix zum Thema Grafikkarten & Monitore ...

Festplatten, SSD, Raid
gelöst Datenträger verabschiedet sich mit 0,00 Bytes, lässt sich nicht mehr initialisieren (21)

Frage von 114801 zum Thema Festplatten, SSD, Raid ...

CPU, RAM, Mainboards
CPU Vergleich & CPU Rangliste

Link von joemix zum Thema CPU, RAM, Mainboards ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(2)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Firewall
gelöst Firewall Firmeneimsatz (22)

Frage von wiesi200 zum Thema Firewall ...

Multimedia & Zubehör
gelöst 8 GB USB Stick besitzt nur noch 4 MB Kapazität (13)

Frage von Gwahlers zum Thema Multimedia & Zubehör ...