Avatar billede sbk200 Nybegynder
10. oktober 2003 - 14:23 Der er 2 kommentarer og
1 løsning

ByteBuffer.. int to byte array

Hej. Jeg anvender en ByteBuffer til at opbygge et telegram som sendes over en socket forbindelse via en output stream. Over forbindensen skal der sendes byte vis. Jeg har dog nogle integer værdier (ex. 9600) som jeg skal have delt ned i bytes. Disse værdier overstiger ikke 2 bytes trods det at der i en int er afsat 4 bytes.

Hvordan får jeg smart min int temp = 9600 over i to bytes:
byte myBuf[2]
myBuf[0] = MSB_of_temp
myBuf[0] = LSB_of_temp
?
Da det kun er tal værdier 0 - 255 jeg sender hvordan bygger man så smart et byte array op ? Gerne dynamisk med variable længde! ..Håber i forstår mine spørgsmål!
Avatar billede arne_v Ekspert
10. oktober 2003 - 14:45 #1
Flere muligheder:
1)

(byte)(temp / 256)
(byte)(temp % 256)

2)

(byte)((temp  & 0xFF) >> 8)
(byte)(temp & 0xFF)

3)

DataOutputStream
Avatar billede arne_v Ekspert
10. oktober 2003 - 21:53 #2
Eksempel på alle 3 (inkl. fix af fejlen i #2):

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;

public class IntToBytes {
    public static void main(String[] args) throws Exception {
        short v = 9600;
        byte[] b1 = new byte[2];
        b1[0] = (byte)(v / 256);
        b1[1] = (byte)(v % 256);
        System.out.println(b1[0] + " " + b1[1]);
        byte[] b2 = new byte[2];
        b2[0] = (byte)((v  >> 8) & 0xFF);
        b2[1] = (byte)(v & 0xFF);
        System.out.println(b2[0] + " " + b2[1]);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeShort(v);
        dos.flush();
        byte[] b3 = baos.toByteArray();
        System.out.println(b3[0] + " " + b3[1]);
    }
}
Avatar billede sbk200 Nybegynder
20. oktober 2003 - 12:49 #3
Tak for det !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester