Ich erhalte einige numerische Daten von einem Java-Client über Socket-Verbindung auf C++ Server. Wenn ich 4-Byte-Int-Typ Daten erhalte, was ich brauche, ist nur mit Ntohl() -Funktion oder umgekehrt die Bit-Reihenfolge in C++ Int-Typ zu konvertieren. Allerdings habe ich Probleme, lange Datentypen aus Java zu konvertieren. Egal was ich versuchte, ich konnte den korrekten Wert nicht wiederherstellen. Ich habe auch LONG64, ULONG64 und int64_t verwendet, und keiner von ihnen hat funktioniert.Konvertieren von Java in Int64 in C++
Zum Beispiel, wenn ich lange s = 1 aus Java, auf C++ Seite Ich habe an:
int64_t size;
recv(client, (char *)&size, sizeof int64_t, 0);
wenn ich
size = ntohl(size)
Dann Größe wird sich 0 unabhängig von der ursprünglichen long-Wert ist in Java!
Wenn ich nicht ntohl() Umwandlung tun, dann size = 72057594037927936 für s = 1
Ich habe gefunden, kaum nützliche Informationen zu diesem Thema und ich würde jeden Vorschlag zu schätzen wissen.
Nur zur Klarheit, auf welcher Architektur ist ein 4-Byte-Int-Typ Daten besetzt * 64 Bit *? Zuletzt habe ich überprüft, ** 4 ** Bytes sind fast immer 4 Oktetts = ** 32 ** Bits. Du weißt, du könntest immer (a) sie in ein 'int8_tar [n] 'lesen und tatsächlich die Anzahl der gelesenen Bytes überprüfen und bestätigen, wo sie sich in der Sequenz befinden. Die Überprüfung des Rückgabeergebnisses von 'recv' konnte ebenfalls nicht schaden. – WhozCraig
Java, im Gegensatz zu C und C++ zum Beispiel, kümmert sich nicht um Endianess; Es wird immer Big Endian sein. Ist das nicht die Ursache Ihres Problems? – fge
Vielen Dank für Ihre Vorschläge. Wie von Rob in der Antwort gesagt, ist das Problem auf ntohl() -Funktion selbst, es arbeitet auf 32-Bit-Daten. –