Top-Themen

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, 2424 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
C und C++
Int to byte
gelöst Frage von Power-PolerC und C++11 Kommentare

Guten Tag, Habe gerade ein kleines Problem, welches mir Kopfzerbrechen bereitet. Und zwar will ich über den Pi an ...

Exchange Server
Get-MoveRequestStatistics nur mit Bytes
Frage von germaneseExchange Server3 Kommentare

Hallo zusammen, ich habe einen Exchange 2013 und eine Hybridstellung zu Office 365, es laufen gerade ein paar Migrationen ...

Basic
Regex Anzahl Character Nicht Anzahl Bytes
gelöst Frage von PeronasBasic6 Kommentare

Guten Morgen zusammen, und zwar habe ich eine Frage bzgl. RegEx/RegExp. Ich habe einen regulären Ausdruck der wie folgt ...

Windows 7
MsPaint.exe 0 Byte groß und beschützt
Frage von EDVMan27Windows 73 Kommentare

Hallo, ich habe hier 3 Windows 7 64Bit Lenovo-PCs auf denen mspaint.exe 0 Byte groß ist. Da es bei ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 7 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 7 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 8 StundenSicherheit6 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 8 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...