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

darnau 11 Messages postés mardi 7 novembre 2006Date d'inscription 29 avril 2008 Dernière intervention - 22 avril 2008 à 15:12 - Dernière réponse : darnau 11 Messages postés mardi 7 novembre 2006Date d'inscription 29 avril 2008 Dernière intervention
- 22 avril 2008 à 20:56
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 22 avril 2008 à 16:08
3
Merci
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 !

Merci cs_Kenavo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Kenavo
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 22 avril 2008 à 17:43
3
Merci
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%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 22 avril 2008 à 20:28
3
Merci
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 !

Merci cs_Kenavo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Kenavo
darnau 11 Messages postés mardi 7 novembre 2006Date d'inscription 29 avril 2008 Dernière intervention - 22 avril 2008 à 16:25
0
Merci
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
Commenter la réponse de darnau
darnau 11 Messages postés mardi 7 novembre 2006Date d'inscription 29 avril 2008 Dernière intervention - 22 avril 2008 à 17:07
0
Merci
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
Commenter la réponse de darnau
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 22 avril 2008 à 18:02
0
Merci
... C'était une traduction du chinois vers le japonais, par f0xy.
Commenter la réponse de Caribensila
darnau 11 Messages postés mardi 7 novembre 2006Date d'inscription 29 avril 2008 Dernière intervention - 22 avril 2008 à 20:56
0
Merci
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
Commenter la réponse de darnau

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.