# Byte-Codierung bei Socket-Verbindung ändern



## hugo (13. Jan 2005)

Hallo Zusammen,

wenn ich von Java aus Bytes verschicke, dann werden sie ja im Big-Endian-Format in den Outputstream gesteckt. Da meine Gegenstelle, aber nur Little-Endian-Format versteht, muss das erst umgewandelt werden. Kennt jemand von euch eine einfache Möglichkeit dieser Umwandlung?
Habe mir schon den Thread mit der falschen Bildkodierung angeschaut, aber bin aus dem Quelltext nicht wirklich schlau geworden.

hugo


----------



## Bleiglanz (13. Jan 2005)

kann ich eigentlich nicht glauben

=> Bytes kennen kein BigEndian oder LittleEndian, das spielt nur bei "Words" eine Rolle

wie steckst du sie denn in den OutputStream?


----------



## hugo (13. Jan 2005)

Also reingehen die Daten mit der Funktion write() als int oder String.getBytes();

Warum spielt das nur bei Wors eine Rolle und bei Bytes nicht mehr?


----------



## Bleiglanz (13. Jan 2005)

hä? 

poste doch mal Code...



>>Warum spielt das nur bei Wors eine Rolle und bei Bytes nicht mehr?

Weisst du eigentlich, was BigEndian und LittleEndian bedeuten? Da Bytes nur aus einem Byte bestehen, gibt es keine höherwertiges Byte und auch kein niedrigeres Byte, deshalb spielt die Reihenfolge der beiden Bytes beim übertragen eines Bytes überhaupt keine Rolle


----------



## hugo (13. Jan 2005)

Gut, soweit habe ich verstanden.



```
public boolean sendenStatus(String Seriennummer)
  {
     try
     {
          System.out.println("Herstellung der Verbindung mit: " + url);
          InternetVerbindung NTBBConnection = new InternetVerbindung(url, 4723, Datenverbindung, InternetVerbindung.READ_WRITE);
          String Message = ConfigP(Data); // Ergebnis sind 2 Hex-Zeichen
          String Text = NTBBConnection.readLine();
          while(Text != null)
          {
            System.out.println(Text);
            if(Text.indexOf("ser:" ) >= 0)
            {
               String user = "ntbb";
               System.out.println(user);
               NTBBConnection.writeLine(user);
            }
            if(Text.indexOf("assword:") >= 0)
            {
               String pwd = "test";
               System.out.println(pwd);
               NTBBConnection.writeLine(pwd);
            }


            if(Text.indexOf("bereit zum Empfangen") >= 0)
            {
               String Param1 = new String("K02=");
               String Param2 = new String(";P00=");
               int Zahl = Integer.parseInt(Seriennummer);
               
               NTBBConnection.write(Param1.getBytes());
                // Das soll als Little-Endian übertragen werden.
               NTBBConnection.write(Zahl);

               NTBBConnection.write(Param2.getBytes());
               NTBBConnection.writeLine(Message);
               NTBBConnection.writeLine("No more data");
            }


            if(Text.indexOf("Ende") >= 0 || Text.indexOf("ende") >= 0) break;
            Text = NTBBConnection.readLine();
          }
          NTBBConnection.flush();
          NTBBConnection.close();
          return (Text.indexOf("Ende") >= 0 || Text.indexOf("ende") >= 0);
      }
      catch(IOException IOE)
      {
          System.out.println("Keine Datenverbindung moeglich");
          return false;
      }
  }
```


----------



## hugo (13. Jan 2005)

Habe jetzt folgendes gemacht:

```
int Zahl = Integer.parseInt(Seriennummer);

               Integer kleinereZahl = new Integer(Zahl >> 8);
               byte dasZweiteByte = kleinereZahl.byteValue();
               kleinereZahl = new Integer(Zahl >> 16);
               byte dasDritteByte = kleinereZahl.byteValue();
               kleinereZahl = new Integer(Zahl >> 24);
               byte dasVierteByte = kleinereZahl.byteValue();
               kleinereZahl = new Integer(Zahl);
               byte dasErsteByte = kleinereZahl.byteValue();
               
               NTBBConnection.write(Param1.getBytes());
               NTBBConnection.write(dasVierteByte);
               NTBBConnection.write(dasDritteByte);
               NTBBConnection.write(dasZweiteByte);
               NTBBConnection.write(dasErsteByte);
               NTBBConnection.write(Param2.getBytes());
               NTBBConnection.writeLine(Message);
```
Soweit richtig, oder ist dort irgenwo noch ein Denkfehler drin?

hugo


----------



## Bleiglanz (13. Jan 2005)

a) Was ist NTBBConnection, kenn ich leider nicht?

b) Wo sind hier Sockets???


----------



## Bleiglanz (13. Jan 2005)

>>Soweit richtig, oder ist dort irgenwo noch ein Denkfehler drin? 

probiers erst mal aus; was erwartet denn die Gegenstelle?


----------



## hugo (13. Jan 2005)

Die dir nicht bekannten Objekte enthalten die Methoden zum senden über einen OutputStream(). Da es sich hier um eine gprs-Verbindung handelt, musste ich sie selbst erstellen. Die Sockets sind im Quelltext darüber bei der Deklaration der InternetVerbindung angelegt worden.

Da ich es mit der Gegenstelle noch nicht ausprobieren konnte, war ich auf meinen eigenen kleinen Server angewiesen, der aber auch mit JAVA erzeugt wurde und somit bei der Ausgabe als Zeichenkette nur Müll rauskommt.

Ich wollte eigentlich nur wissen, ob das mit dem nach rechts schieben der Bits richtig ist und dann in umgekehrter Reihenfolge wieder auszugeben ist.


----------

