Avatar billede soreno Praktikant
16. september 2002 - 18:38 Der er 7 kommentarer og
1 løsning

int --> byte --> int

hvis jeg har et heltal, lad os sige 1220124. Hvordan kan man, rent matematisk, få heltal konverteret til byte[] og tilbage igen.

Alstå, jeg har en c++FilModtager der er klar på at modtage en fil. jeg er nødt til at kende filens størrelse for at kunne skille skidt fra snot :-)
dvs. jeg i min JavaFilSender har en attribut som holder på filens længde i bytes. Denne attribut vil jeg så sende som de 4 første bytes og filen bagefter - dvs. jeg sender filLængde+fil. Men, det er et krav at længden altid repræsenteres ved 4 bytes, altså eks:
00 12 9E 1C

hvordan griber jeg denne konvertering an ?
Avatar billede jakoba Nybegynder
16. september 2002 - 19:07 #1
det kan du kun hvis tallet er lille nok til at der er plads til det i de formater du konverterer imellem.

en byte kan fx kun indeholde tal imellem 0 og 255, så 1220124 er alt for stort til at kunne konverteres til en byte uden at miste en masse.

mvh JakobA
Avatar billede soreno Praktikant
16. september 2002 - 19:09 #2
det er nemlig derfor at 1220124 skal konverteres til 4 bytes og tilbage til en int igen, men hvordan ?
Avatar billede jakoba Nybegynder
16. september 2002 - 19:12 #3
men det du vil er vist også at konverete til et byte-array. det kunne evt gøres med:

int dittal = 1220124;
byte[] bytes = byte[4];

for (int i=0; i<4; i++) {
    bytes[i] = dittal % 256;
    dittal = (int)(dittal / 256);
}
// nu står tallet i de 4 byte i arrayet bytes.

int nyttal = 0;    // konverter tilbage til integer
for (int i=0; i<4; i++) {
    nyttal = nyttal*256 *bytes[i];
}

// nu skulle nyttal gerne være 1220124
Avatar billede soreno Praktikant
16. september 2002 - 19:58 #4
hmmm, jeg er ikke helt tilfreds med tilbage konverteringen:
int nyttal = 0;    // konverter tilbage til integer
for (int i=0; i<4; i++) {
    nyttal = nyttal*256 *bytes[i];
}

hvis nu en eller flere bytes har værdien 0x00 så bliver nyttal jo 0..

hvordan kan det løses (smart) ?
Avatar billede jakoba Nybegynder
16. september 2002 - 20:38 #5
den er også gal sidste * skal være et +
    for (int i=0; i<4; i++) {
        nyttal = nyttal*256 +bytes[i];
    }
Avatar billede soreno Praktikant
16. september 2002 - 21:02 #6
jeg kan ikke helt gennemskue det,
med 1220124 får jeg:
[0]28
[1]158
[2]18
[3]0

når det skal tilbage får jeg:
0*256+28 = 28
28*256+158 = 7326
7326*256+18 = 1875474
1875474*256+0 = 480121344

??
Avatar billede jakoba Nybegynder
16. september 2002 - 21:07 #7
Ups igen igen- det skal jo også være den anden vej, anden gang:
    for (int i=3; i>=0; i--) {
        nyttal = nyttal*256 +bytes[i];
    }
en decideret logisk bommert :(
Avatar billede soreno Praktikant
16. september 2002 - 22:21 #8
så fik jeg langt om længe lort på styret - eller var det styr på lortet ? :-)
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