Beug dans la procedure Write de la classe TSream

Résolu
MePoussePasHein Messages postés 1 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 5 décembre 2007 - 5 déc. 2007 à 15:20
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 6 déc. 2007 à 01:48
Salut The Crazy Compagny

Je suis entrain de faire joue joue avec les streams : Voila ce que je suis entrain de faire

Var
MonStream : TFileStream;
AInt : Integer;
Begin
......
AInt:=5;
MonStream.Write(AInt,4);
........
End;

Tout fonctionne ou preque. Ce pachiderme de Stream me fait faire un gros caca nerveux. Z'explique :

Le but recherché est d'avoir 00 00 00 05. Mais manque de bol j'obtients 05 00 00 00.

Je vois pas trop comment m'y prendre sans que ca fasse trop crade.

Mirci

2 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 déc. 2007 à 15:59
Bonjour

C'est normal que les données soient écrites dans cet ordre !!! Si tu veux l'ordre inverse il faudrait que ta variable soit égale à $05000000. Donc attention, si tu modifies l'écriture de ton entier, il faudra également modifier sa relecture !! Une ecriture dans le sens que tu souhaites ne correspondra plus au stockage de la valeur 5 mais de la valeur 83886080.

Si toutefois tu voulais tout de même inverser cet ordre, alors avant l'ecriture il faut rajouter la ligne :
  Aint := Swap(Word(AInt and $FFFF)) shl 16 + Swap(Word(AInt shr 16)) ;

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 déc. 2007 à 01:48
procedure GlobalSwap(const src; out dest; const size: integer);
var pI,pO: ^byte;
    n :  integer;
begin
  pI := @src;
  pO := @dest;
  inc(pI, Size-1);
  for n := 0 to size-1 do
  begin
    pO^ := pI^;
    dec(pI);
    inc(pO);
  end;
end;

procedure ......;
var
  Value : integer;
  Data  : integer;
begin
  Value := $11223344;
  GlobalSwap(Value, Data, 4);
  with TFileStream.Create(......,fmcreate) do
  try
    WriteBuffer(Data, 4);
  finally
    Free;
  end;
end;








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


http://deefaze.gnomz.com
0
Rejoignez-nous