Java Long-Werte in C++ auslesen

JTryn

Mitglied
Hallo,

ich versuche über folgende Methode in Java Long-Werte in eine Datei zu schreiben:
Java:
public void save_longs(){
	try {
	JFileChooser saveDialog=new JFileChooser();
	saveDialog.showSaveDialog(window);
	FileOutputStream file=new FileOutputStream(saveDialog.getSelectedFile());
	DataOutputStream dos = new DataOutputStream(file);
		
	long test = 1;
	long test2 = 2;
	long test3 = 3;
	long test4 = 4;
		
	dos.writeLong(test);
	dos.writeLong(test2);
	dos.writeLong(test3);
	dos.writeLong(test4);
		
	dos.close();
	}catch (IOException e) {
		e.printStackTrace();
	}
}

Auslesen in Java (testweise) klappt auch.
Java:
public void load_longs(){
	try {
		JFileChooser saveDialog=new JFileChooser();
		saveDialog.showOpenDialog(window);
		FileInputStream file=new FileInputStream(saveDialog.getSelectedFile());
		DataInputStream dos = new DataInputStream(file);
		
		long test = dos.readLong();
		long test2 = dos.readLong();
		long test3 = dos.readLong();
		long test4 = dos.readLong();
		
		System.out.println(test);
		System.out.println(test2);
		System.out.println(test3);
		System.out.println(test4);
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}

Wenn ich nun aber versuche in C++ mit folgendem Code versuche die Werte auszulesen
ergeben sich andere Werte als die, die ich eingespeichert habe.

Code:
std::ifstream mapfile("test.map", std::ios::binary);
long test = 0;
long test2 = 0;
long test3 = 0;
long test4 = 0;

mapfile.read(reinterpret_cast < char * > (&test), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test2), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test3), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test4), sizeof(long));

cout << "VALUE: " << test << endl;
cout << "VALUE2: " << test2 << endl;
cout << "VALUE3: " << test3 << endl;
cout << "VALUE4: " << test4 << endl;

In diesem Fall wird mir ausgegeben:
Code:
VALUE: 0
VALUE2: 16777216
VALUE3: 0
VALUE4: 33554432

Speichere ich die Werte mit C++ (hiermit)
Code:
std::ofstream mapfile("test.map", std::ios::binary);
long test = 1;
long test2 = 2;
long test3 = 3;
long test4 = 4;

mapfile.write(reinterpret_cast < char * > (&test), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test2), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test3), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test4), sizeof(long));

mapfile.close();

und lese sie danach wieder mit der Funktion darüber aus werden mir die korrekten Werte
ausgegeben.

Folglich ziehe ich den Schluss, dass Java und C++ die Binärdaten unterschiedlich speichern.
Des Weiteren fiel mir auf, dass Werte wie "-1" wiederum in C++ korrekt ausgelesen werden.

Wie könnte ich die Java-Werte richtig in C++ auslesen?
 
Zuletzt bearbeitet:

andiv

Bekanntes Mitglied
Das Problem könnte sein, dass der long-Datentyp in C++ eine andere Größe als in Java hat. Ich meine dass viele C++-Compiler für long genauso wie für int 4 byte verwenden. Dafür gibt es den Datentyp long long der 8 Byte hat! In irgendeiner Headerdatei gibt es Typedefs der Form int8_t, int16_t, int32_t, int64_t,... Verwende doch am Besten die wenn die Größe des Datentyps für deinen Anwendungsfall wichtig ist.

Java: short = 16 Bit, int = 32 Bit, long = 64 Bit

Edit: Der Header heißt cstdint
 

JTryn

Mitglied
Leider nicht, aber gut zu wissen, wird sicher interessant sein, wenn ich mehr damit mache.

Egal ob ich es als _int64, int_64t (aus dem Header) oder long long einlese (die alle richtigerweise
mit einer Bytegröße von 8 zurückgegegeben werden) - das Problem besteht weiterhin.
Stattdessen werden mir nun sogar noch viel größere Zahlen in der Konsole ausgegeben.
 

andiv

Bekanntes Mitglied
Nächster Verdacht: Byte-Order (also die Reihenfolge in der die Bytes gespeichert werden)
Schau dir mal die erstellten Dateien mit einem Hex-Editor an und schau ob da Little Endian oder Big Endian verwendet wird. Das würde für mich die völlig falschen Zahlen erklären.
 

JTryn

Mitglied
Vielen Dank! Daran lag es. Wie es aussieht verwendet Java Big-Endian, während C++
Little-Endian verwendet. Mit einer Funktion zum switchen in C++ werden nun die
richtigen Werte ausgegeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Umwandung von Vb auf Java Softwareentwicklung 1
von Spotz Kommunikation zwischen Java und Container Orchestrator (Microservices) Softwareentwicklung 11
S Microservices in Java Spring: Nebenläufigkeitsprobleme lösen Softwareentwicklung 6
temi Elementfunktionen vs. Nichtelementfunktionen in Java Softwareentwicklung 20
R Umsetzungen in Java vs. Umsetzungen auf Datenbankebene Softwareentwicklung 9
L Module Eclipse Java 9 Softwareentwicklung 12
R Software-Architekt (Schwerpunkt Java) Softwareentwicklung 9
S VB.NET / C# als Java-Entwickler? Softwareentwicklung 2
J Java Kentnisse vertiefen oder andere Programmiersprache probieren? Softwareentwicklung 8
U Java vs. anderen plattformunabhängige Programmiersprachen Softwareentwicklung 8
S JNI Java from C Softwareentwicklung 0
H [Java]Regex Hilfe Softwareentwicklung 3
D Teamspeak Java html app Softwareentwicklung 5
N UML Komponenten als Java-Klassen abbilden Softwareentwicklung 4
S Java Anfänger hat Probleme mit Scanner Softwareentwicklung 6
C Lohnt es sich noch ein neues Projekt in C++ anstatt Java zu realisieren? Softwareentwicklung 4
U Java oder welche Sprache? Softwareentwicklung 98
MrWhite Ist Java gar nicht sooo objektorientiert??! Softwareentwicklung 16
K Mit "Java" html-Seite entscripten Softwareentwicklung 6
Airwolf89 Theoretische Frage - In Java Java-Programme schreiben Softwareentwicklung 5
G Mischsprache aus Java & C# Softwareentwicklung 23
H COBOL und Java Softwareentwicklung 17
H Java als Backend, Javascript als View Softwareentwicklung 3
D Sind EJB Komponenten auch mit Java Swing nutzbar? Softwareentwicklung 8
U Decorator Pattern in der Java API Softwareentwicklung 6
J Java Software nach C++ portieren Softwareentwicklung 6
C Unterschiede: C++ vs. C# vs. Java Softwareentwicklung 21
G Umstieg Java/Oracle => C#/MSSQL Softwareentwicklung 13
A Jira durch Java ansprechen Softwareentwicklung 18
M Immutable Objekte und funktionales Programmieren in Java oder Scala Softwareentwicklung 34
B [Web 2.0] Java vs PHP Softwareentwicklung 28
Raidri Flex mit Java Softwareentwicklung 2
L Java + WCF Softwareentwicklung 9
Airwolf89 Java-Programm in C++ portieren Softwareentwicklung 4
T Kapselung nich vollständig umgesetzt in Java? Softwareentwicklung 4
J Korpus mit Python einlesen - weiterbearbeiten mit Java Softwareentwicklung 4
N c# nach java Softwareentwicklung 14
K Suche freies UML Tool um aus .java dateien Diagramme zu. Softwareentwicklung 8
D Java in KLassen, schon vorhanden? Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
R Java Passwort verschlüsseln --> kompliziert! wirklich doo Softwareentwicklung 13
F vorteile php gegenüber java? Softwareentwicklung 46
M Umwandlung von String in java.sql.Date Softwareentwicklung 2
lolkind Iso Datein per Java über Windows XP brennen Softwareentwicklung 13
U [Diskussion] Java vs. C# Softwareentwicklung 208
E Java Programm distributen Softwareentwicklung 35
J Hardware zugriff mit java? Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G java.lang.ArrayIndexOutOfBoundsException Softwareentwicklung 5
E Default Java unter Linux aendern? Softwareentwicklung 3
S arabische Buchstaben in java ?:L Softwareentwicklung 3
L Noch 'ne Perl-Frage. Kehre dann auch reumütig zu Java zurück Softwareentwicklung 10
G Serveranbindung mit java Softwareentwicklung 24
P Grafik-Programm mit JAVA? Softwareentwicklung 21
G Umstieg von Delphi zu JAVA (wichtige Fragen!) Softwareentwicklung 41
F Welche Sprache sieht ähnlich aus wie Java? Softwareentwicklung 7
T Suche A Star Java Beispielprogramm Softwareentwicklung 2
D C# zu Java - Übersetzer gesucht. Softwareentwicklung 3
F Windows Media Player in Java? Softwareentwicklung 11
C C code in java umschreiben Softwareentwicklung 9
O java und c# - die zweite. Softwareentwicklung 7
S Problem PJIRC java-applet Softwareentwicklung 4
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
G C++ in JAVA verpacken Softwareentwicklung 2
D C# vs. java Softwareentwicklung 16
G Darstellung von Java-Projekten mit UML Softwareentwicklung 3
E Java & Performance Softwareentwicklung 9
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3
W Herangehensweise an ein Java Programm Softwareentwicklung 4
B Programmierung eines 8051-Assemblers unter Java Softwareentwicklung 3
M Bidirektionale Assoziazion in Java realisieren? Softwareentwicklung 3
J Java <-> C# Softwareentwicklung 1
S c# schneller java - wieso ? Softwareentwicklung 12
D C++ und Java Softwareentwicklung 61
B Werte mit gegebener Wahrscheinlichkeit selektieren Softwareentwicklung 4
T Dynamische Werte (HTML, JavaScript) Softwareentwicklung 4

Ähnliche Java Themen

Neue Themen


Oben