int in byte

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

ich habe ein int- Array und möchte dieses int- Array in ein Byte- Array speichern, damit ich dieses dann über das Netzwerk schicken kann.

Code:
 writeByte = intArray;

wenn z.B.: in intArray[0]= 600 drinnensteht, sollen in writeByte[0] = 2 und in writeByte[1] = 88 drinnenstehen (2*256 = 512 + 88 = 600)

Gibts da in Java einen Befehl?


lg und Danke
 

Rock Lobster

Bekanntes Mitglied
Das wirst Du Dir selber zusammenbauen müssen... dürfte aber ein 10-Zeiler sein, einfach 'ne Konvertierungsfunktion, die mit zwei For-Schleifen die Werte zerlegt und korrekt abspeichert.
 

MQue

Top Contributor
Gibts keine Funktion die das macht, nur bytes zu kopieren ist ja etwas grundlegendes!?

Wie meinst du das mit 2 for- Schleifen??

lg
 

byte

Top Contributor
Ungetestet:

Code:
ByteArrayOutputStream boas = new ByteArrayOutputStream(); 
DataOutputStream out = new DataOutputStream( boas ); 

int[] arr = new int[] {1,2,3,4};
for(int i=0; i<arr.length; i++) {
  out.writeInt(arr[i]);
}

out.close(); 
byte[] result = boas.toByteArray();
 

MQue

Top Contributor
Ja, Danke
ich würde aber die reine Umwandlung von int -Array in Byte- Array benötigen, das senden ist schon voll ausprogrammiert nur eben die Umwandlung würde ich benötigen.


lg und vielen Dank
Michl
 

The_S

Top Contributor
Hat dir eigentlich schonmal jemand gesagt, dass du immer die komischsten Probleme hast :lol: ?

Bei deiner Konvertierung liegt ein Denkfehler vor. Was wenn intArray[0] = 100.000 ist? Dann bekommste das nach deiner Methode schonmal nicht in 2 bytes. Das Konvertieren ist kein Problem, aber das auslesen dann sollte komplex werden, weil nicht bekannt ist, ob der int jetzt ein, zwei, drei oder vier bytes umfasst. Lass dir da mal was besseres einfallen und dann reden wir weiter!

Ansonsten siehe byto!
 

MQue

Top Contributor
Also es liegt kein Denkfehler, ich benötige das, da ich dann das byte- Array zu einem Gerät schicke, welches eben nur bytes empfangen kann,
mir ist schon klar, dass ich ungewöhnliche Probleme habe aber ich habe auch eine ungewöhnliche Aufgabenstellung.
(Verbinden von Java mit Steuerungen, sämtlichen Protokollen -MB usw.)

Meine Konvertierung:

Code:
for (int m = 0; m < zwischenBuf.length; m++)
                                    {
                                    for (int n = 0; n < 2; n++)
                                        {
                                        switch (n)  {
                                            case 0: writeBuf[2+(m*2)+n] = zwischenBuf[m] & 0xff00; // Fehler: possible loss of precision
                                                    break;
                                            case 1: writeBuf[2+(m*2)+n] = zwischenBuf[m] & 0x00ff; // Fehler: possible loss of precision
                                                    break;
                                            }
                                        }
                                    }


Weiß jemand, wie ich die beiden Fehlermeldungen wegbekomme?

lg
 

The_S

Top Contributor
Explizit angeben in was du casten möchtest!

Wenn du keinen Denkfehler hast, dann greif doch bitte mal mein Beispiel auf und erkläre mir wie das nach deiner Konvertierungsmethode funktionieren soll ... evtl. steh ich ja gerade aufm schlauch!
 

MQue

Top Contributor
Das Protokoll welches ich sende: Adresse, Modus,high Byte 1. Wert, low Byte 1. Wert, high Byte 2. Wert, low Byte 2. Wert, usw .... CRC
 

Marco13

Top Contributor
Michael1234 hat gesagt.:
Code:
                                    for (int n = 0; n < 2; n++)
                                        {
                                        switch (n)  {
                                            case 0: ...  break;
                                            case 1: ...  break;
                                            }
                                        }
                                    }
Du läuftst dort in einer Schleife von 0 bis 1, und das einzige, was du in der Schleife machst, ist, zu überprüfen, ob du gerade bei 0 oder bei 1 bist :roll:
 

Rock Lobster

Bekanntes Mitglied
Gibts keine Funktion die das macht, nur bytes zu kopieren ist ja etwas grundlegendes!?

Willkommen in der Welt von Java ;)
Hier gibt's z.B. auch keine unsigned-Variablen. Hatte so ähnliche Probleme wie Du auch schon tausendfach, z.B. weil ich im Moment gerade ein Audioprogramm basteln muß, bei dem ich auch ständig Buffer in die unterschiedlichsten Formate konvertieren muß. Und da wäre es manchmal echt wünschenswert, man könnte einfach einen memcopy machen.

Du scheinst mit 16-bit-Werten zu arbeiten, dann müßte das folgende gehen:

Code:
int size = inBuffer.length * 2;
byte[] outBuffer = new byte[size];
int k=0;

for(int i=0; i<size/2; i++)
{
   outBuffer[k] = (byte)(inBuffer[i] >> 8);
   outBuffer[k+1] = (byte)inBuffer[i];
}

Allerdings mußt Du auch auf die ByteOrder usw. achten. Wenn Du jetzt auch zwischendrin noch mit 32-bit-Werten arbeiten willst, würde ich eben die inneren zwei Zeilen noch durch eine innere for-Schleife ersetzen und dann der Funktion die Anzahl der Bytes pro Int übergeben.

Ach ja, hab es grad auch nicht testen können, daher bitte selbst kurz testen, inwieweit das funktioniert.

EDIT: Das Bitshifting war falschrum...
 

MQue

Top Contributor
Stimmt, ich mache nichts mehr, wo ich nicht erweitern könnte (-> schwieriger Auftrag mit unendlich vielen Änderungen und Erweiterungen... nach der Planung)
 

MQue

Top Contributor
Rock Lobster hat gesagt.:
Gibts keine Funktion die das macht, nur bytes zu kopieren ist ja etwas grundlegendes!?

Willkommen in der Welt von Java ;)
Hier gibt's z.B. auch keine unsigned-Variablen. Hatte so ähnliche Probleme wie Du auch schon tausendfach, z.B. weil ich im Moment gerade ein Audioprogramm basteln muß, bei dem ich auch ständig Buffer in die unterschiedlichsten Formate konvertieren muß. Und da wäre es manchmal echt wünschenswert, man könnte einfach einen memcopy machen.

genau das würde ich eben suchen -> ein memcpy(ziel, src, Anzahl der bytes) -> mit dem arbeite ich auf meiner Steuerung -> die kopiert nur Bytes und macht keine Typprüfung wie Java, das ist mir schon bewusst, wie das Java macht aber ich dachte mir, mein Problem ist nicht neu und es gibt schon was.

vielen dank und lg
 

Rock Lobster

Bekanntes Mitglied
Code:
public static byte[] convert(int[] array, int bytePerInt, boolean bigEndian)
{
    int size = inBuffer.length;
    byte[] outBuffer = new byte[size * bytePerInt]; 

    if (bigEndian)
        for(int i=0; i<size; i++) 
            for(int k=0; k<bytePerInt; k++)
                outBuffer[k] = (byte)(inBuffer[i] >> (32 - k*8));
    else
        for(int i=0; i<size; i++) 
            for(int k=0; k<bytePerInt; k++)
                outBuffer[k] = (byte)(inBuffer[i] >> (k*8));
}

Auch ungetestet... müßte aber funzen, probier's einfach mal aus.

EDIT: Jepp, hast Recht. Java ist leider auch nicht perfekt ;) es hat zwar seine guten Seiten, aber bei manchen Dingen begreife ich echt nicht, wieso die das rausgelassen haben. Mit byte-Arrays zu arbeiten ist manchmal absolut furchtbar, da wäre ein ordentlicher Buffer ein Segen. Notfalls müßte man sich da eben selber eine kleine Klasse drumrum bauen, wird wohl langfristig das klügste sein...
 
R

Roar

Gast
benutz doch einfach einen DataOutputStream der hat eine writeShort() methode
 

MQue

Top Contributor
Nönö nicht ignoriert aber ich habe die Klasse für die Ausgabe schon fertig und will diese nicht mehr umändern,

vielen Dank für Eure Antworten

lg
 

Marco13

Top Contributor
OK, dann hast du nicht den Tipp an sich ignoriert, sondern die Tatsache, dass das (vielleicht? vermutlich?) genau das war, was du suchtest, und NICHTS mit der eigentlichen Ausgabe zu tun hatte... :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Thallius unsigned byte Allgemeine Java-Themen 18
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
R Byte Array Zeichensuche Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
O Byte-Array zu String Allgemeine Java-Themen 7
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
E Byte zu String & umgekehrt Allgemeine Java-Themen 3
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
E int in byte Allgemeine Java-Themen 6
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
G byte ? : Allgemeine Java-Themen 7
E Byte-Array to String: Zeichenkaputt Allgemeine Java-Themen 11
R In einem Byte-Array nach einer gewissen Zahlenfolge suchen Allgemeine Java-Themen 7
hdi Speicherbelegung byte, short, int Allgemeine Java-Themen 8
J byte - hex - byte.. casten Allgemeine Java-Themen 8
R byte[] to String Konvertieren Allgemeine Java-Themen 14
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
M byte array splitten Allgemeine Java-Themen 3
J Hex-String zu byte transformieren Allgemeine Java-Themen 7
T Zu doof für byte-Umrechnung ... Allgemeine Java-Themen 3
W CRC32 aus byte array Allgemeine Java-Themen 5
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
L byte -> byte[1] -> byte Allgemeine Java-Themen 2
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
Kr0e Synchronisieren: boolean,byte,char ? Allgemeine Java-Themen 2
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Semox Byte-Manipulation eines Bildes Allgemeine Java-Themen 7
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
C int zu byte cast - verständnis Allgemeine Java-Themen 3
R int to byte[] Array Allgemeine Java-Themen 4
MQue byte[] Array to Integer Allgemeine Java-Themen 4
MQue Byte to Int convertieren Allgemeine Java-Themen 2
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
W Verwendung von byte Allgemeine Java-Themen 9
G zu lange Byte code dateien Allgemeine Java-Themen 6
G String in byte- Array Allgemeine Java-Themen 3
E Byte [] nach hex, dann nach dec Allgemeine Java-Themen 2
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
G 2 x byte zusammenkopieren Allgemeine Java-Themen 7
G byte nach int Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
W Konflikt byte->int, in.read->arraycopy Allgemeine Java-Themen 7
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
F byte in hex-String oder: Wer hat in Mathe aufgepasst Allgemeine Java-Themen 3
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
J NumberFormatException bei String->byte[] Allgemeine Java-Themen 12
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
T Object -> byte[] Allgemeine Java-Themen 5
G Byte[] zeichenweise lesen Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
B int -> byte Allgemeine Java-Themen 2
G file --> byte[] Allgemeine Java-Themen 7
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
I String -> byte[] -> String Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
G Maximalgröße von byte[] buffer Allgemeine Java-Themen 7
E String -> byte[] Allgemeine Java-Themen 6
C Byte[] to String Allgemeine Java-Themen 7
D datei in byte[]-array schreiben Allgemeine Java-Themen 6
D byte[] problem Allgemeine Java-Themen 3
MQue ArrayList in ein byte- Array Allgemeine Java-Themen 7
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
J byte-Array als String übers http schicken Allgemeine Java-Themen 8
F List<String> zu byte[] Allgemeine Java-Themen 7
L byte vs. int Allgemeine Java-Themen 6
G Umwandlung Byte in Integer Allgemeine Java-Themen 12
N Byte-Code entschlüsseln (Bitmasks?) Allgemeine Java-Themen 3
R byte - string? Allgemeine Java-Themen 10
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
B boolean array = byte array (platzverbrauch) Allgemeine Java-Themen 6
L byte[] to int Allgemeine Java-Themen 2
M Vector zu einem byte[] Allgemeine Java-Themen 5
C Byte Array aus Datei erzeugen Allgemeine Java-Themen 6
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
B Problem mit Einlesen vom Byte FF aus Dateien Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben