Problème DELPHI HEXA -> Virgule Flottante [Résolu]

Signaler
Messages postés
11
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
11
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2008
-
Bonjour,


Je suis étudiant en informatique et dans le cadre de mon stage je doit réaliser un Shape (.shp) Viewer.

Je suis en train de tenter de "décortiquer" l'entête du fichier .shp.

Le problème c'est que pour X min j'obtiens : 411EE334000003C2 ce qui ne me parle pas beaucoup.

Je devrais obtenir une valeur proche de 506061.


Si quelqu'un à une idée pour récupérer la valeur approchée en nombre a virgule flottante.


Merci d'avance.

D@rNaU

7 réponses

Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Salut,

Ça c'est la représentation hexa d'un réel sur 8 octets (type Double) égal à 506061.000000055996

Voir :



représentation IEEE en virgule flottante






Ken@vo




<hr size="2" width="100%" />



Code, Code, Codec !
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
Position Field Value Type Order
Byte 0 File Code 9994 Integer Big

Byte 4 Unused 0 Integer Big
Byte 8 Unused 0 Integer Big
Byte 12 Unused 0 Integer Big
Byte 16 Unused 0 Integer Big
Byte 20 Unused 0 Integer Big

Byte 24 File Length File Length Integer Big
Byte 28 Version 1000 Integer Little
Byte 32 Shape Type Shape Type Integer Little

Byte 36 Bounding Box Xmin Double Little
Byte 44 Bounding Box Ymin Double Little
Byte 52 Bounding Box Xmax Double Little
Byte 60 Bounding Box Ymax Double Little
Byte 68* Bounding Box Zmin Double Little
Byte 76* Bounding Box Zmax Double Little
Byte 84* Bounding Box Mmin Double Little
Byte 92* Bounding Box Mmax Double Little








{ Declaration du type SHPFileHeader }



{ SHP File Header }
Type
  pSHPFileHeader = ^TSHPFileHeader;
  TSHPFileHeader = record
    FileCode  : integer; { = 9994 }

    __Unused0 : integer;

    __Unused1 : integer;

    __Unused2 : integer;

    __Unused3 : integer;

    __Unused4 : integer;
    FileLength: integer;
    Version   : integer; { = 1000 }
    ShapeType : integer;
   

BBXmin    : Double;
    BBYmin    : Double;
    BBXmax    : Double;
    BBYmax    : Double;
    BBZmin    : Double;
    BBZmax    : Double;
    BBMmin    : Double;
    BBMmax    : Double;

  end;

const
  SIZEOFSHPFileHeader = SizeOf(TSHPFileHeader);

{ Shape Type }
const
  ShapeTypeNull        = 0;
  ShapeTypePoint       = 1;
  ShapeTypePolyLine    = 3;
  ShapeTypePolygon     = 5;
  ShapeTypeMultiPoint  = 8;
  ShapeTypePointZ      = 11;
  ShapeTypePolyLineZ   = 13;
  ShapeTypePolygonZ    = 15;
  ShapeTypeMultiPointZ = 18;
 
ShapeType
PointM      = 21;
 
ShapeType
PolyLineM   = 23;
 
ShapeType
PolygonM    = 25;
 
ShapeType
MultiPointM = 28;
 
ShapeType
MultiPatch  = 31;

{ Exemple Lecture }

var
  FileHeader : TSHPFileHeader;
begin
  ...
  with TFileStream.Create(FileName, fmOpenRead) do
  try
    ReadBuffer(FileHeader, SIZEOFSHPFileHeader);
    ...
  finally
    Free;
  end;
  ...
end;

{ Exemple Ecriture }


var

  FileHeader : TSHPFileHeader;

begin

  ...

  with TFileStream.Create(FileName, fmCreate) do

  try
    FileHeader... := ...;
    Position := 0;

    WriteBuffer(FileHeader, SIZEOFSHPFileHeader);

    ...

  finally

    Free;

  end;

  ...

end;



Shape File specification [PDF]

<hr size="2" width="100%" />
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Vénérable f0xy très gentil donner solution toute faite !
Mais honorable étudiant doit .... étudier !...





Peut être ceci plus clair !

Ken@vo




<hr size="2" width="100%" />



Code, Code, Codec !
Messages postés
11
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2008

Merci beaucoup pour ta réponse même si je comprend rien du tout je vais voire avec mon responsable de stage si ca peut l'aider.

Encore Merci.

D@rNaU
Messages postés
11
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2008

Excuse moi Kenavo pourrais-je avoir de plus amples
informations sur la technique que tu as utilisés pour effectuer la conversion
car ton site me parais vraiment écrit en Chinois... (Désolé je débute   [javascript:Insert_Emoticon('/imgs2/smile_sad.gif'); ]   )


Merci d'avance.


D@rNaU
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
... C'était une traduction du chinois vers le japonais, par f0xy.
Messages postés
11
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2008

Merci ton dernier lien etais bien plus clair.
Après plus de recherche j'obtient :
code

<hr color="#ffffff" size="1" />procedure TForm1.Button6Click(Sender: TObject);

var

  i64: int64;

  r: Double absolute i64; // r a donc la même adresse que i64, et tous les 2 sont codés sur 8 octets

begin

  i64:=$411EE334000003C2; // on affecte l'un des deux

  ShowMessage(FloatToStr(r)); // et on lit l'autre...

end;

Merci encore!!

D@rNaU