begin process at 2008 07 25 03:54:39
1 216 054 membres
37 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème DELPHI HEXA -> Virgule Flottante [ Divers / Débutant(e) ] (darnau)

Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 15:12:41

darnau
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

Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 16:08:25

Kenavo
Réponse acceptée !
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

Code, Code, Codec !

Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 16:25:56

darnau
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

Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 17:07:08

darnau

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      )

Merci d'avance.

D@rNaU


Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 17:43:12

f0xi
Membre Club
(Admin CS)
Réponse acceptée !

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]





Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 18:02:07

Caribensila
Membre Club
... C'était une traduction du chinois vers le japonais, par f0xy.


Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 20:28:31

Kenavo
Réponse acceptée !
Vénérable f0xy très gentil donner solution toute faite !
Mais honorable étudiant doit .... étudier !...

Peut être ceci plus clair !

Ken@vo

Code, Code, Codec !

Re : Problème DELPHI HEXA -> Virgule Flottante le 22/04/2008 20:56:30

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

code


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


Classé sous : problème, delphi, virgule, hexa, flottante

Participer à cet échange

Pub



Appels d'offres

Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€
Demande de devis pour ...
Budget : 7 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS