Avatar billede Henrik_B Novice
04. juli 2004 - 18:10 Der er 4 kommentarer og
1 løsning

Alignment af int.

Hejsa.

Jeg benytter Borland CPP 4 Pro.

Jeg er ved at læse en fil ind i en struktur. Jeg kender strukturens format, og kan se data i en hex-editor (FRHED 1.1.0)

Problemet er at når jeg læser data ind i min struct, så vender data om, i forhold til, hvad der forventes.

Et eksempel:
I hex-editoren kan jeg se at der står '90 07'.
Det oversætter editoren fint til 1936, men når jeg læser det ind i en unsigned short int, så bliver værdien 36864. De 1936 svarer til 0790 i hex, mens 36864 svarer til 9007 i hex. Jeg skal altså på en eller anden måde have compileren til at 'vende om' på hex-værdierne.

Jeg ved at min struktur er ok i længden, da det er en del af et array, jeg indlæser, og jeg kan se at det første felt, som er en char[8], passer for alle værdier i arrayet.

Jeg håber at en af eksperterne kan hjælpe.

M.v.h.
  Henrik.

P.S. Jeg overvejer at opgradere til BCB 6, kan det svare sig ? Hvad får man mere med den nye version ?
Avatar billede arne_v Ekspert
04. juli 2004 - 18:19 #1
Du skal vel bare have konverteret den short fra big endian til little endian.

Prøv med ntohs funktionen på den.
Avatar billede bertelbrander Novice
04. juli 2004 - 20:07 #2
#include <stdio.h>
#include <winsock.h>

#define SWAP_SHORT(a_) ((unsigned short )((((a_) >> 8) | ((a_) << 8))))

int main(void)
{
  unsigned short org = 0x9007;

  printf("%04X %04X %04X\n", org, htons(org), SWAP_SHORT(org));
  return 0;
}
Avatar billede sovsekoder Nybegynder
04. juli 2004 - 22:40 #3
forklaringen er at din maskine gemmer og henter i "little endian" format, hvilket betyder at mindst-betydende byte er først, derfor bliver $90 $07 til $07 $90, når du læser direkte ind i en struct (som ligger i hukommelsen).

Løsningen er givet ovenfor.
Avatar billede sovsekoder Nybegynder
04. juli 2004 - 22:41 #4
..grunden til at dit Char array ikke bliver byttet rundt er at "et char kun fylder een byte" (så der er ikke noget med at tage højde for mest/mindst betydende byte)
Avatar billede Henrik_B Novice
07. juli 2004 - 23:37 #5
Jeg siger mange tak for den store hjælp.

Jeg er kommet frem til at jeg skal konvertere data felt for felt, og ikke læse det hele direkte ind i een struktur ved een læsning. Nu laver jeg et char-array, og bearbejder det. Når jeg så får problemer, så spørger jeg bare her igen.
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