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, 2401 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
Microsoft Office
gelöst Excel: Wert aus mehreren Zeilen vergleichen (2)

Frage von Nicolaas zum Thema Microsoft Office ...

Batch & Shell
gelöst AD Usernamen in CSV Vergleichen (32)

Frage von Hainoon zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen und Vergleichen Zweiter CSV Dateien Powershell (7)

Frage von Hainoon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows 10

Windows 8.x oder 10 Lizenz-Key aus dem ROM auslesen mit Linux

(6)

Tipp von Lochkartenstanzer zum Thema Windows 10 ...

Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(40)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Heiß diskutierte Inhalte
Windows 10
gelöst Windows 10 Home "Netzlaufwerk nicht bereit" (19)

Frage von Oggy01 zum Thema Windows 10 ...

DNS
gelöst Komplette TLD Überschreiben bzw eigene Definieren (10)

Frage von Herbrich19 zum Thema DNS ...

Exchange Server
gelöst RU 17 Exchange 2010 . Erfahrungen? (10)

Frage von keine-ahnung zum Thema Exchange Server ...

Datenbanken
gelöst MySQL Zeiterfassungs-Problematik (wer ist eingecheckt) (9)

Frage von NativeMode zum Thema Datenbanken ...