Forum » » Création-Développement » » Ecriture - lecture fichier sur plateformes différentes
Posté : 11-12-2014 14:30
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