website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Ecriture - lecture fichier sur plateformes différentes


Posté : 11-12-2014 14:30 icone du post


Pour être clair il y a deux sens d' "ordering" à la motorola ou à l'intel
Donc si tu lis ou écris une fichier d'un format donné il faut suivre la spec du format pour son ordering (Idem si tu créée un format = faut se décider)


Par exemple pour IFF c'est motorola
 FB->FileByteOrder='M';


Après on peut auto détecter l'ordering de ta machine
WORD One=1;
UBYTE *TestOrder=(UBYTE *)&One;


 if(TestOrder[1]==1)
  {FB->ComputerByteOrder='M';}
 else
  {FB->ComputerByteOrder='I';}


Et on réordonne si besoin


FB->Reorder=(FB->ComputerByteOrder!=FB->FileByteOrder)



/*==================================================================== ======*/
UBYTE GetByte(FileBuffer3D *FB)
{
UBYTE val;


 val=FB->pt[0];
 GetSkip(FB,1);
 return(val);
}
/*========================================================================= =*/
UWORD GetWord(FileBuffer3D *FB)
{
UBYTE vals[2];
UWORD *pt=(UWORD*)vals;


 if(!FB->Reorder)
 {
 vals[0]=FB->pt[0];
&nb sp;vals[1]=FB->pt[1];
 }
 else
 {
 vals[0]=F B->pt[1];
 vals[1]=FB->pt[0];
 }
 GetSkip(FB,2);< BR> return(*pt);
}
/*=============================================== ===========================*/
ULONG GetLong(FileBuffer3D *FB)
{
UBYTE vals[4];
ULONG *pt=(ULONG*)vals;


 if(!FB->Reorder)
 {
 vals[0]=FB->pt[0];
&nb sp;vals[1]=FB->pt[1];
 vals[2]=FB->pt[2];
 vals[3]=FB-> ;pt[3];
 }
 else
 {
 vals[0]=FB->pt[3];
& nbsp;vals[1]=FB->pt[2];
 vals[2]=FB->pt[1];
 vals[3]=FB-& gt;pt[0];
 }
 GetSkip(FB,4);
 return(*pt);
}
/*== ========================================================================*/
f loat GetFloat(FileBuffer3D *FB)
{
UBYTE vals[4];
float *pt=(float*)vals;


 if(!FB->Reorder)
 {
 vals[0]=FB->pt[0];
&nb sp;vals[1]=FB->pt[1];
 vals[2]=FB->pt[2];
 vals[3]=FB-> ;pt[3];
 }
 else
 {
 vals[0]=FB->pt[3];
& nbsp;vals[1]=FB->pt[2];
 vals[2]=FB->pt[1];
 vals[3]=FB-& gt;pt[0];
 }
 GetSkip(FB,4);
 return(*pt);
}
/*== ========================================================================*/
v oid GetSkip(FileBuffer3D *FB,LONG n)
{
 FB->pos= FB->pos + n;
 FB->pt = FB->pt  + n;
}
/*================================================================== ========*/


Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1992&forum=14