22 Voix

Lazarus: Charger Fichier en tant que Array d'Octets et Enregistrer Array d'Octets en tant que Fichier

Tutoriel de Delphiain | 02/04/2021 à 19:29

Dans ce didacticiel, je veux vous montrer comment lire un fichier octet par octet dans un array et comment réécrire un array d'octets dans un fichier.

Tout d'abord, définissons un tableau d'octets:

type
  TByteArr = array of Byte;

Nous pouvons maintenant le remplir avec quelques octets individuels:

var
  BA: TByteArr;
begin
  SetLength(BA, 3);
  BA[0] := 65;
  BA[1] := $41;
  BA[2] := %1000001;

Ainsi, peu importe si nous spécifions les octets en notation décimale, hexadécimale ou binaire.

65 est le code ASCII pour "A". En notation hexadécimale, le nombre 65 correspond à 41 et en notation binaire à 1000001.

Dans l'exemple, nous définissons les trois octets sur la même valeur. Les valeurs décimales peuvent être écrites sous forme de nombres entiers simples dans le code, les nombres hexadécimaux sont indiqués par $ et les nombres binaires par %.

Enregistrer Tableau d'Octets

Voyons maintenant comment nous pouvons enregistrer notre tableau d'octets dans un fichier. Pour cela, nous utilisons la fonction suivante:

procedure SaveByteArray(AByteArray: TByteArr; const AFileName: string);
var
  Stream: TStream;
begin

  if FileExistsUTF8(AFileName) then DeleteFileUTF8(AFileName);

  Stream := TFileStreamUTF8.Create(AFileName, fmCreate);
  try
     Stream.WriteBuffer(Pointer(AByteArray)^, Length(AByteArray));
  finally
     Stream.Free;
  end;

end;  

Un exemple d'utilisation peut ressembler à ceci:

var
  BA: TByteArr;
begin
  SetLength(BA, 1);
  BA[0] := 65;
  SaveByteArray(BA, 'fichier.dat');

Comme premier paramètre, nous passons notre tableau d'octets, comme deuxième paramètre le nom de fichier souhaité.

Charger un Tableau d'Octets

Pour charger un fichier du disque dur dans un tableau d'octets, la fonction suivante est utile:

function LoadByteArray(const AFileName: string): TByteArr;
var
  Stream: TStream;
  DataLeft: Integer;
begin
  SetLength(result, 0);

  if not FileExistsUTF8(AFileName) then exit;

  Stream := TFileStreamUTF8.Create(AFileName, fmOpenRead or fmShareDenyWrite);
  try
     stream.Position:=0;
     DataLeft := Stream.Size;
     SetLength(result, DataLeft div SizeOf(Byte));
     Stream.Read(PByte(result)^, DataLeft);
  finally
     Stream.Free;
  end;

end; 

Un appel à la fonction peut ressembler à ceci:

var
  BA: TByteArr;
begin
  BA := LoadByteArray('file.dat');

Nous transmettons uniquement un nom de fichier en paramètre et récupérons le tableau d'octets.

Visualiser Tableau d'Octets

Lorsque vous travaillez avec des tableaux d'octets, la question de l'affichage du contenu du tableau d'octets se pose tôt ou tard. Il est logique de générer les tableaux d'octets sous forme hexadécimale sous forme de chaîne / string. Par exemple, une sortie du tableau d'octets mentionné ci-dessus ressemblerait à ceci: "41 41 41".

RépondrePositifNégatif

Sur l’Auteur

AvatarL’auteur n’a pas encore ajouté de brève description de profil.
Voir Profil

 

Sujets Connexes

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.