HEX String zu einem Byte Array ? *verzweiflung* :(

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,

ich habe da folgendes kleines Problem und hoffe hier ein wenig hilfe zu finden :roll:

Also ich bin gerade dabei ein Programm zu schreiben das mit die Daten aus einem EKG Monitor ließt. Das ganze geschieht über eine UDP Verbindung. Ich habe mir jetzt ein Programm geschrieben das die über UDP senden/empfangen kann. Das funktioniert bis jetzt auch alles ganz gut. Nur leider muss ich dem Monitor bestimmte Hexketten zuschicken damit ich von dem Gerät eine Antwort bekommen und genau da liegt mein Problem.

Im Moment wandel ich immer einen String in ein Bytearray um und schicke das ganze dann in einem Paket zu dem Gerät. Was ich jetzt aber an Steuercodes habe liegt alles in Hexformat vor und ich weiß nicht wie ich die Hexwerte "als" Hexwerte senden kann.

Bsp. 0x1D

würde ich das ganze von Sting zu byte wandeln -> byte = string.getBytes()
so sende ich aber nur ASCII zeichen, wenn ich den Netzverkehr auslesen habe ich im Paket als Datenanhang nur
0x3144 zu stehen. Da möchte ich aber die 0x1D haben :cry:



Kann mir da bitte jemand weiterhelfen, ein Link ein Codefetzen ihrgendwas wie ich aus dem Hexstring auch Hexdaten senden kann ohne das es in ASCII umgewandelt wird :bahnhof:

Achso was noch blöd ist das byte ja nur von -127 bis 127 geht da das 8te bit als Vorzeichenbit zählt. Ich brauche aber alle 8Bit (255) da im Hexcode auch Werte vorkommen die größer als 0x7F (127) sind.

mit freundlichen Grüßen,
Taki :oops:
 
S

stev.glasow

Gast
Taki Haki hat gesagt.:
würde ich das ganze von Sting zu byte wandeln -> byte = string.getBytes()
so sende ich aber nur ASCII zeichen, wenn ich den Netzverkehr auslesen habe ich im Paket als Datenanhang nur
0x3144 zu stehen. Da möchte ich aber die 0x1D haben :cry:
Also new String("0x1D".getBytes()) ergibt wieder "0x1D", wenn du den String sendest und diesen dann wieder per new String(bytes) zusammen fügst sollst du also eigentlich wieder zu dem String "0x1D" kommen. Zeig mal deinen Code.

Taki Haki hat gesagt.:
Achso was noch blöd ist das byte ja nur von -127 bis 127 geht da das 8te bit als Vorzeichenbit zählt. Ich brauche aber alle 8Bit (255) da im Hexcode auch Werte vorkommen die größer als 0x7F (127) sind.

Willst du jetzt den String senden oder den Wert?

Wenn du den String sendest spielt das keine Rolle und wenn du den Wert senden willst könnest du das so angehen:

Code:
String hex = "0xFD";
int value = Integer.parseInt(hex.substring(2, hex.length()), 16); 
System.out.println(value);


byte[] bytes = new byte[]{
		(byte)(value & 0xFF),
		(byte)(value >> 8 & 0xFF),
		(byte)(value >> 16 & 0xFF),
		(byte)(value >> 24 & 0xFF)
	};

byte[] bytes2 = bytes; // hier werden sie dann übertragen

int value2 = bytes2[0] & 0xFF | bytes2[1] << 8 & 0xFF | bytes2[2] << 16 & 0xFF | bytes2[3] << 24 & 0xFF;

System.out.println(value2);
Oder du sendest 'value' einfach über nen DataInputStream
 

babuschka

Top Contributor
Hallo Stevg,

ich möchte den Wert senden. Also wenn ich 0x1D im Hexstering zu stehen habe möchte ich 0x1D auch im netzwerkpaket stehen haben und nicht die ASCII Werte für 0,x,1,D

ich probiere mal dein Programmstück auch und schreib dir dann wie weit ich damit gekommen bin.

Aber erstmal danke :)

bye
 

babuschka

Top Contributor
Hier habe ich mal so einen String, die sind normal noch bischen länger aber in der Form müßte ich die Werte per UDP versenden.

0x05 0x08 0x13 0x01 0x00 0x16 0x01 0x02 0x80 0x00 0x14 0x02 0x00 0x02

???:L
 

babuschka

Top Contributor
ich nochmal :roll:

also ich habe das jetzt so ausprobiert und es funktioniert wunderbar :) ich sende genau den Hexwert der im String steht über das Netz. Habe aber...

(byte)(value >> 8 & 0xFF),
(byte)(value >> 16 & 0xFF),
(byte)(value >> 24 & 0xFF)

weggelassen da der mir sonst die Hexwerte immer auf 8 Stellen wandelt und 6 davon mit 0 gefüllt sind.
Nun hänge ich noch an einer klitzekleinen Sache fest.

Kann man ein bytearray also byte[] einfach um ein byte erweitern ??? hinten was dranhängen und wenn ja wie ?

denn wenn ich die Hexwerte aus dem String der reihe nach rauskopiere und umwandel muss ich sie ja auch alle wieder in ein bytearry packen damit ich sie dann über das netz schicken kann. Nur wie genau kann man nen bytearray erweitern :bahnhof:

mfg Taki
 
S

stev.glasow

Gast
weggelassen da der mir sonst die Hexwerte immer auf 8 Stellen wandelt und 6 davon mit 0 gefüllt sind.
Nun hänge ich noch an einer klitzekleinen Sache fest.
???:L

Kann man ein bytearray also byte[] einfach um ein byte erweitern ??? hinten was dranhängen und wenn ja wie ?

denn wenn ich die Hexwerte aus dem String der reihe nach rauskopiere und umwandel muss ich sie ja auch alle wieder in ein bytearry packen damit ich sie dann über das netz schicken kann.

Versteh zwar überhaupt nicht mehr was du das machst aber java.io.ByteArrayOutputStream könnte evtl. sein was du brauchst.
 

Bleiglanz

Gesperrter Benutzer
Code:
String s = "0x05 0x08 0x13 0x01 0x00 0x16 0x01 0x02 0x80 0x00 0x14 0x02 0x00 0x02 0x1D";
String[] stringValues = s.split("\\s");
byte[] byteValues = new byte[stringValues.length];
for(int i=0;i<stringValues.length;i++)
{
    byteValues[i]=(byte) (Integer.parseInt(stringValues[i].substring(2),16));
	System.out.println(byteValues[i]);   
}
was das mit dem
Code:
byte[] bytes = new byte[]{
      (byte)(value & 0xFF),
      (byte)(value >> 8 & 0xFF),
      (byte)(value >> 16 & 0xFF),
      (byte)(value >> 24 & 0xFF)
   };
soll ist mir auch unklar,

0x1D = 1 x 16 + 13 = 29

0x80 = 8 x 16 = 128 als unsigned byte (und wird in Java als -128 angezeigt, macht aber nichts)


sind doch genau die bytes?
 

babuschka

Top Contributor
also das mit den 8 stellen. Ich habe einen Hexwert umgewandelt und ihn dann in ein UDPPaket gesteckt und abgeschickt. Dann habe ich mir das Paket per Netzwerksniffer angeschaut und da habe ich dann nicht 0x86 stehen, sondern 0x86000000. Deshalb habe ich die letzten 6 Stellen weggenommen da ich in dem Hex String nur 1Byte Hexwerte habe.

Das mit dem Array, ich versuch es nochmal anders zu erklären :oops: Also ich habe ja den String mit den Hexwerten.
Aus dem wollte ich jetzt immer einen Hexwertrauskopieren diesen umwandeln und in ein Bytearray packen. Danach dann den 2ten Hexwert aus dem String umwandeln in das Bytearray packen. Aber das reinpacken geht wohl nicht so wie ich mir das gedacht habe. Müßte deshalb wohl immer ein neues bytearray erstellen das eine stelle mehr hat als das alte und dann alles aus dem alten ins das neue kopieren und ganz an die letzte Stelle den neuen Hexwert. Das würde ich dann solange machen bis ich alle Hexzeichen aus dem String durchgegangen bin und am Ende müßte ich dann ein Bytearray habe wo alle Hexwerte nach der Reihe aufgelistet drin stehen.

Ich schau mir aber mal java.io.ByteArrayOutputStream an, vielleicht hilft mir das ja und es gibt ne bessere Lösung.

Taki
 
S

stev.glasow

Gast
@Bleiglanz:
Stimmt, bis 0xFF kann ich's ja einfach casten - übersehen.
Hab einfach den int in nen byte array umgewandelt.

Übrigens fehlen da beim zurückwandeln Klammern:
""int value2 = bytes2[0] & 0xFF | bytes2[1] << (8 & 0xFF) | bytes2[2] << (16 & 0xFF) | bytes2[3] << (24 & 0xFF);""
 

babuschka

Top Contributor
@Bleiglanz

dein code funktioniert wunderbar :D ich kannte Split() garnicht. Da Spar ich mir dann ja das ganze kopiere.

Code:
public void udpSend(int port, String adress, String s) {
			try
				{
				 	DatagramPacket packet;
					DatagramSocket socket = new DatagramSocket();
					
					String[] stringArray = s.split("\\s"); 
					byte[] dataArray = new byte[stringArray.length]; 
					for(int i=0;i<stringArray.length;i++) 
					{ 
						dataArray[i]=(byte) (Integer.parseInt(stringArray[i].substring(2),16)); 
					    //System.out.println(byteValues[i]);    
					}
					
					InetAddress ia = InetAddress.getByName( adress );
			        packet = new DatagramPacket( dataArray, dataArray.length, ia, port );
					
					// Paket senden
					socket.send( packet );
					
			    }
			 catch ( Exception e )
			    {
					System.out.println( e );
				}
			 
		}
so sieht das jetzt nu aus.
Dickes Danke an euch zwei :applaus:
 

babuschka

Top Contributor
hmm neue Frage :oops: wie bekomme ich den aus nem Bytearray die Hexwerte raus und in nen String rein???
mir war so als wenn es da ne decode methode gibt ???:L

mfg taki
 

babuschka

Top Contributor
Code:
byte        recieveData[]	= recievePacket.getData();

StringBuffer sb = new StringBuffer(recieveData.length * 2);// StringBuilder in 1.5
for(int x = 0 ; x < recieveData.length ; x++)
{
         sb.append("0x"+( "0" + Integer.toHexString(0xff & recieveData[x])).substring(0, 2)+" ");
}

stringOUT = sb.toString();

wenn ich bei dem substring 1 bis 3 nehme bekomme ich immer nen Fehler :(
 

byte

Top Contributor
hä? wo steckt da denn die logik?

1 byte sind 8 bit. 127 dezimal ist binär 1111111. das achte bit braucht man für das vorzeichen, demnach kannst du also nur zahlen von -127 bis 127 speichern.
 

Bleiglanz

Gesperrter Benutzer
natürlich hat man 256 mögliche Werte, ein byte ist ein byte

es geht von -128 bis 127 (einschliesslich)
 

babuschka

Top Contributor
hmm :? hat den niemand was um nen Bytearray in Hex umzuwandeln. Mit meinem Code kann ich einen einzelnen Bytewert umwandeln, aber wenn ich dann versuche nen ganzen Array umzuwandeln bekomme ich immer nen Fehler ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
T Socket Gleiche String ungleich? Netzwerkprogrammierung 8
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
F String in Datenbank speichern Netzwerkprogrammierung 1
I RMI String Netzwerkprogrammierung 2
precoc String Array versenden Netzwerkprogrammierung 7
T Socket String zu Socket Netzwerkprogrammierung 26
7 String an Server Netzwerkprogrammierung 2
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
S WebService, 4-stelliger String (Jahr) als Calendar Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Messenger - String oder Objekte Netzwerkprogrammierung 4
T Socket Nullterminierten String lesen Netzwerkprogrammierung 4
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
N Socket Stream in String Netzwerkprogrammierung 4
J Browser-String angeben Netzwerkprogrammierung 5
S String[] über Socket senden Netzwerkprogrammierung 3
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
G String in InetAddres umwandeln klappt nicht Netzwerkprogrammierung 5
A String per ByteBuffer empfangen? Netzwerkprogrammierung 6
ModellbahnerTT Problem feste String ins Netzwerk zu geben Netzwerkprogrammierung 5
G UTF-8 in STring umwandeln oder umgedreht Netzwerkprogrammierung 12
F String in eine URL umwandeln Netzwerkprogrammierung 7
P string over net Netzwerkprogrammierung 4
T Html-Source über URL in einen String speichern? Netzwerkprogrammierung 16
K String zurück liefern ! Netzwerkprogrammierung 4
S SSLSocketFactory.createSocket(String hostname, int port),wo? Netzwerkprogrammierung 5
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
C gesendeten String einlesen Netzwerkprogrammierung 3
G String to Socket ? Netzwerkprogrammierung 3
A StringCorruptedException: invalid String header Netzwerkprogrammierung 2
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
J client server mit nur einem PC Netzwerkprogrammierung 33
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
M allgemeine Frage zu einem Web Service Client Netzwerkprogrammierung 2
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
B Grundlegende Fragen zu einem Verbindungsaufbau in einem LAN Netzwerkprogrammierung 15
Rudolf Socket An welchen Port sendet ein Mailserver zu einem anderen Mailserver Netzwerkprogrammierung 8
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
R Threads mit einem WebService Netzwerkprogrammierung 4
N Java NIO eingehende und ausgehende Verbindungen mit einem Selector Netzwerkprogrammierung 12
cedi Socket Mehrere Clients an einem Server Netzwerkprogrammierung 4
C I/O - Synchronisation durch Threads in einem ChatClient Netzwerkprogrammierung 4
D Socket Automatischer Reconnect nach einem Disconnect. Netzwerkprogrammierung 4
H Socket Socket verbindung mit einem TeamSpeak2 Server Netzwerkprogrammierung 5
P Wie gibt man einem GUI Programm ein Web interface? Netzwerkprogrammierung 5
D "FileChooser" auf einem Webserver Netzwerkprogrammierung 5
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
J Mit Java Anwendung ein (externes) Programm auf einem AIX Rechner starten Netzwerkprogrammierung 6
Schandro Herausfinden ob hinter einem Port bereits ein ServerSocket steckt Netzwerkprogrammierung 2
E Zeit von einem Zeitserver beziehen? Netzwerkprogrammierung 4
H Mit Java ein JPG auf einem Server öffnen. Netzwerkprogrammierung 7
U problem mit verbindung zu einem irc server Netzwerkprogrammierung 3
D Multicast geht nur auf einem Rechner Netzwerkprogrammierung 9
A Java-Programm auf einem Server laufen lassen Netzwerkprogrammierung 9
E upload progress bei einem http file post Netzwerkprogrammierung 5
C Verbindung zum Server prüfen mit einem vorhandenem Socket Netzwerkprogrammierung 4
S RMI server in einem Mehrbenutzer-System mit Auth? Netzwerkprogrammierung 10
D Verbindung über ein Servlet zu einem Server Netzwerkprogrammierung 4
B Im eingelesenen Text nach einem Wort suchen Netzwerkprogrammierung 46
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
G Anzahl verbundener Clients zu einem FTP-Server ermitteln? Netzwerkprogrammierung 4
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
V Kann keine DatagramPackets versenden von einem Jar Archiv Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
V Zuweisen einer InetAddress mit einem byte Netzwerkprogrammierung 5
J Webserver auf einem Pocket PC Netzwerkprogrammierung 2
S Dateien auf einem HTTP Server Netzwerkprogrammierung 2
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
C Login bei einem php-script Netzwerkprogrammierung 2
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
O Dateien von einem Server laden Netzwerkprogrammierung 3
T Datei, auf einem Netzwerkrechner speichern. Netzwerkprogrammierung 11
S MySQL, PHP, Perl Support in einem Java HTTP Server? Netzwerkprogrammierung 7
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
D Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen Netzwerkprogrammierung 3
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
C Byte Stream dekodieren Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben