Avatar billede bris Nybegynder
01. april 2005 - 13:09 Der er 5 kommentarer og
1 løsning

long to byte[]

Hejsa. Min stærke side har aldrig været formatering af forskellige datatyper

Jeg skal bruge en metode, som ser sådan her ud:

public byte[] toBytes(long number) {
//Implementation
}

Jeg skal bruge dem, for at sende dem gennem en stream. Og nej, jeg kan ikke bruge alle mulige object streams eller lign.
Avatar billede dsj Nybegynder
01. april 2005 - 13:25 #1
Følgende burde kunne gøre det:

public byte[] toBytes(long val) {
  return new byte[] {
    (byte) ( (val >> 56) & 0xff), (byte) ( (val >> 48) & 0xff), (byte) ( (val >> 40) & 0xff),
    (byte) ( (val >> 32) & 0xff), (byte) ( (val >> 24) & 0xff), (byte) ( (val >> 16) & 0xff),
    (byte) ( (val >> 8) & 0xff), (byte) (val & 0xff)
  };
}
Avatar billede arne_v Ekspert
01. april 2005 - 13:26 #2
Du shifter vel bare ?

public byte[] toBytes(long number) {
  byte[] res = new byte[8];
  long tmp = number;
  for(int i = 0; i < 8; i++) {
        res[i] = (byte)(tmp & 0xFF);
        tmp = tmp >> 8;
  }
  return res;
}

Jeg forstår iøvrigt ikke hvorfor du ikke kan bruge DataOutputStream.

PS: Jeg forudsætter little endian !
Avatar billede bris Nybegynder
01. april 2005 - 13:47 #3
Det er fordi jeg faktisk sender nogle objekter gennem en socket, som er blevet lavet om til bytes, og derefter skal jeg bare sende enkelte tal. Det bliver noget rod, sådan som jeg har lavet det.
Jeg tror faktisk, at jeg bliver nødt til at have det i MSB, alta "High" endian. Tror du, at du kan overskue det?
Avatar billede dsj Nybegynder
01. april 2005 - 13:49 #4
Mit forslag forudsætter big endian, hvis det er det du mener med "High".
Avatar billede arne_v Ekspert
01. april 2005 - 14:43 #5
res[7 - i] = (byte)(tmp & 0xFF);

gør det til big endian
Avatar billede arne_v Ekspert
26. april 2005 - 00:31 #6
bris>

Alt OK ?
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