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, 2381 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
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

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

Frage von s0m3ting zum Thema Windows Server ...

Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateiinhalte vergleichen - Gemeinsamkeiten anzeigen (9)

Frage von Rotnasenkater zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...