php's pack() in Java

Status
Nicht offen für weitere Antworten.

Ch3ck3r

Mitglied
Hi,

Ich habe gerade neu mit Java angefangen und habe schon was größeres vor. Es geht um eine Kommunikation zwischen mir und einem Server über einen Socket.
Das Problem ist, dass die Nachrichten (Strings) als Binärcode an den Server gesendet werden müssen.

In PHP habe ich das immer mit pack() gelöst.

Dieses Projekt erfordert dabei die Strings Stringlänge, Handle, Stringtext gepackt (in PHP) mit dem Format VVa*

also
stringlänge als unsigned long (always 32 bit, little endian byte order)
handle als unsigned long (always 32 bit, little endian byte order)
stringtext als NUL-padded string (so oft wiederholt wie nötig)

stringlänge ergibt sich aus dem stringtext, handle ist immer 0x80000000

Da ich die Funktion pack in Java nicht finde habe ich mir so ausgeholfen:
Code:
private String toBinary(int value) {
		String x = Integer.toBinaryString(value);
		while (x.length() < 32) {
			x = "0"+x;
		}
		return x;
	}
	private String toBinary(String string) {
		StringBuffer sb = new StringBuffer(string);
		String bin = "";
		for (int i = 0; i < sb.length(); i++){
			bin = bin + Integer.toBinaryString(sb.charAt(i));
		}
		return bin;
	}

Funktioniert natürlich nicht ... :(

Ich hoffe jemand von euch kann mir helfen.
Vielen Dank im Vorraus
 

gex

Bekanntes Mitglied
Poste doch mal den In/Output von PHP pack - so wie das auch in Java resultieren sollte.
 

Ch3ck3r

Mitglied
Input:
<?xml version="1.0" encoding="utf-8">
<methodCall>
<methodName>Function</methodName>
<params>
<param>
<value>
<string>Argument</string>
</value>
</param>
</params>
</methodCall>

Output mit Java
00000000000000000000000010110010
10000000000000000000000000000000
11110011111111110001101101110110010000011101101100101111001011100111101001110111111011101111011000
10110001101110110000100010100000110010111011101100011110111111001001101001110111011001111111011000
10111010111101001100110101101111000100010111110101011110011011011100101111010011010001101111110010
01000011110000111011001101100111110101011110011011011100101111010011010001101111110010010011101100
00111011011100101111110100011011101011101110110001111101001101001110111111011101111001011111101101
11001011110100110100011011111100100100111011000011101101110010111111010101111001110000110000111100
10110000111011011110011111110101011110011100001100001111001011000011101101111110101011110011101101
10000111011001110101110010111111010101111001110011111010011100101101001110111011001111111101000001
11100101100111111010111011011100101110111011101001111001011111110011111010011100101101001110111011
00111111110101011110010111111101101100001110110011101011100101111110101011110010111111100001100001
11100101100001110110111111010101111001011111110000110000111100101100001110110111100111111101010111
10010111111011011100101111010011010001101111110010010000111100001110110011011001111101010

Output mit PHP pack()
10111011000000100000001111001111111111000110110111011001000001110110110010111100101110011110
10011101111110111011110110001011000110111011000010001010000011001011101110110001111011111100100110
10011101110110011111110110001011101011110100110011010110111100010001011111011011010111100110110111
00101111010011010001101111110010010000111100001110110011011001111101101101011110011011011100101111
01001101000110111111001001001110110000111011011100101111110100011011101011101110110001111101001101
00111011111101110111100101111110110111001011110100110100011011111100100100111011000011101101110010
11111101101101011110011100001100001111001011000011101101111001111111011011010111100111000011000011
11001011000011101101111110110110101111001110110110000111011001110101110010111111011011010111100111
00111110100111001011010011101110110011111111010000011110010110011111101011101101110010111011101110
10011110010111111100111110100111001011010011101110110011111111011011010111100101111111011011000011
10110011101011100101111110110110101111001011111110000110000111100101100001110110111111011011010111
10010111111100001100001111001011000011101101111001111111011011010111100101111110110111001011110100
1101000110111111001001000011110000111011001101100111110

Zeilenumbrüche manuell eingefügt
 

gex

Bekanntes Mitglied
Ich habe mal die beiden Outputs verglichen und sinnvoll Umbrüche gemacht:

Java:
0000000000000000000000001011001010000000000000000000000000000000
1111001111111111000110110111011001000001110110110010111100101110011110100111011111101110111101100010110001101110110000100010100000110010111011101100011110111111001001101001110111011001111111011000101110101111010011001101011011110001000101111101010
1111001101101110010111101001101000110111111001001000011110000111011001101100111110
1010
1111001101101110010111101001101000110111111001001001110110000111011011100101111110
10001101110101110111011000111110100110100111011111101110
1111001011111101101110010111101001101000110111111001001001110110000111011011100101111110
1010
111100111000011000011110010110000111011011110011111110
1010
11110011100001100001111001011000011101101111110
1010
11110011101101100001110110011101011100101111110
1010
111100111001111101001110010110100111011101100111111110
10000011110010110011111101011101101110010111011101110100
111100101111111001111101001110010110100111011101100111111110
1010
11110010111111101101100001110110011101011100101111110
1010
11110010111111100001100001111001011000011101101111110
1010
111100101111111000011000011110010110000111011011110011111110
1010
1111001011111101101110010111101001101000110111111001001000011110000111011001101100111110
1010

PHP:
1011101100000010000000
11110011111111110001101101110110010000011101101100101111001011100111101001110111111011101111011000101100011011101100001000101000001100101110111011000111101111110010011010011101110110011111110110001011101011110100110011010110111100010001011111011011010
1111001101101110010111101001101000110111111001001000011110000111011001101100111110
11011010
1111001101101110010111101001101000110111111001001001110110000111011011100101111110
10001101110101110111011000111110100110100111011111101110
1111001011111101101110010111101001101000110111111001001001110110000111011011100101111110
11011010
111100111000011000011110010110000111011011110011111110
11011010
11110011100001100001111001011000011101101111110
11011010
11110011101101100001110110011101011100101111110
11011010
111100111001111101001110010110100111011101100111111110
10000011110010110011111101011101101110010111011101110100
111100101111111001111101001110010110100111011101100111111110
11011010
11110010111111101101100001110110011101011100101111110
11011010
11110010111111100001100001111001011000011101101111110
11011010
111100101111111000011000011110010110000111011011110011111110
11011010
1111001011111101101110010111101001101000110111111001001000011110000111011001101100111110

Habe mir kurz mittels Tool den Input in binär geschrieben und ausgeben lassen:
start reading input.xml
<?xml version="1.0" encoding="utf-8"> : 111100111111111100011011011101100100000111011011001011110010111001111010011101111110111011110110001011000110111011000010001010000011001011101110110001111011111100100110100111011101100111111101100010111010111101001100110101101111000100010111110
<methodCall> : 1111001101101110010111101001101000110111111001001000011110000111011001101100111110
<methodName> : 1111001101101110010111101001101000110111111001001001110110000111011011100101111110
Function : 10001101110101110111011000111110100110100111011111101110
</methodName> : 1111001011111101101110010111101001101000110111111001001001110110000111011011100101111110
<params> : 111100111000011000011110010110000111011011110011111110
<param> : 11110011100001100001111001011000011101101111110
<value> : 11110011101101100001110110011101011100101111110
<string> : 111100111001111101001110010110100111011101100111111110
Argument : 10000011110010110011111101011101101110010111011101110100
</string> : 111100101111111001111101001110010110100111011101100111111110
</value> : 11110010111111101101100001110110011101011100101111110
</param> : 11110010111111100001100001111001011000011101101111110
</params> : 111100101111111000011000011110010110000111011011110011111110
</methodCall> : 1111001011111101101110010111101001101000110111111001001000011110000111011001101100111110

Was auffällt, die erste Zeile ist anders, sowie alle Zeilenumbrüche (11011010 in PHP, 1010 in Java).

In PHP verwendest du ja explizit Little Endian (mit V).
Java arbeitet jedoch mit Big Endian - weshalb du die Stringlänge sowie Handle zuerst von Big nach Little Endian wandeln musst.

Hier den Code den ich testeshalber geschrieben habe:
Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class Test {
	public static void main(String[] args) throws IOException {

		// irgend ein zahlenwert
		long l = 478;
		System.out.println("long");
		System.out.println("big endian");
		System.out.println("-----------");
		System.out.println("dezimal: \t" + l);
		System.out.println("hex: \t\t" + Long.toHexString(l));
		System.out.println("binary: \t" + Long.toBinaryString(l));
		l = bigToLittleEndian(l);
		System.out.println("little endian");
		System.out.println("-----------");
		System.out.println("dezimal: \t" + l);
		System.out.println("hex: \t\t" + Long.toHexString(l));
		System.out.println("binary: \t" + Long.toBinaryString(l));
		System.out.println();
		System.out.println();
		System.out.println();

		// irgend ein zahlenwert
		int i = 478;
		System.out.println("int");
		System.out.println("big endian");
		System.out.println("-----------");
		System.out.println("dezimal: \t" + i);
		System.out.println("hex: \t\t" + Integer.toHexString(i));
		System.out.println("binary: \t" + Integer.toBinaryString(i));
		i = bigToLittleEndian(i);
		System.out.println("little endian");
		System.out.println("-----------");
		System.out.println("dezimal: \t" + i);
		System.out.println("hex: \t\t" + Integer.toHexString(i));
		System.out.println("binary: \t" + Integer.toBinaryString(i));
		System.out.println();
		System.out.println();
		System.out.println();
		
		System.out.println("start reading input.xml");
		BufferedReader br = new BufferedReader(new FileReader("input.xml"));
		String line;
		while (null != (line = br.readLine())) {
			System.out.print(line + "\t:\t");
			System.out.println(toBin(line));
		}
		br.close();
	}

	public static String toBin(String string) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < string.length(); i++) {
			sb.append(Integer.toBinaryString(string.charAt(i)));
		}
		return sb.toString();
	}

	public static long bigToLittleEndian(long bigendian) {
		ByteBuffer buf = ByteBuffer.allocate(8);

		buf.order(ByteOrder.BIG_ENDIAN);
		buf.putLong(bigendian);

		buf.order(ByteOrder.LITTLE_ENDIAN);
		return buf.getLong(0);
	}
	
	public static int bigToLittleEndian(int bigendian) {
		ByteBuffer buf = ByteBuffer.allocate(4);

		buf.order(ByteOrder.BIG_ENDIAN);
		buf.putInt(bigendian);

		buf.order(ByteOrder.LITTLE_ENDIAN);
		return buf.getInt(0);
	}
	
	public static short bigToLittleEndian(short bigendian) {
		ByteBuffer buf = ByteBuffer.allocate(2);

		buf.order(ByteOrder.BIG_ENDIAN);
		buf.putShort(bigendian);

		buf.order(ByteOrder.LITTLE_ENDIAN);
		return buf.getShort(0);
	}

}

Jetzt musst du mal schauen, wie du deine Stringlänge sowie Handle in der korrekten Länge rausschreiben kannst, und wie du die Zeilenumbrüche vereinheitlichen kannst (resp. hast du einem ort \n\r und am anderen nur \r bzw. \n)?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Methoden pack(); Java Basics - Anfänger-Themen 49
S Gnome Icon Pack - erzwingt es die GPL? Java Basics - Anfänger-Themen 7
S Porblem mit JFrame.pack() Java Basics - Anfänger-Themen 2
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
B Fenstergröße variiert bei JDialog.pack()-Aufruf Java Basics - Anfänger-Themen 10
0x7F800000 wie pack ich komplette objekte in binäre dateien? Java Basics - Anfänger-Themen 4
M wie pack ich das swt in meine *.jar Java Basics - Anfänger-Themen 8
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben