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 : Extraire un block qui contien des chaines de caractere [ Algorithme / Compression, Split et Cryptage ] (Napster)

mercredi 18 avril 2007 à 22:44:40 | Extraire un block qui contien des chaines de caractere

Napster

salut  ,
mon souçi dans cette example et d'extraire des block qui se separent par
88AA et pour calculer leur checksum
le checksum  se calcule comme suite  :
example de la premiere ligne
reper des blocks = 88AA
ce qui est en bleu ces le checksum
et pour avoire le checksum en calcule tout qui est en noire

B75D69AB8B3A28576B88AA0EF6B34A6C
E9337BDCB939E2FFBF4BE51701DDAB1B
B3A362C056C797CA98305F71216AA910
84054B0FE4EEB8915C74B72114E94B3D
99C2C9DD928A249F488AA8C6E860B909
06E1C325FF0B36616A035BA0CB4A5BAF
7D204323063E887BD257B6919F4C294B
1AC8F218296DDACF9AD1D72931AF409D
37BCE7655B82E6255C22666FA97C9E25
70454E398B8C6B0D688AAFECED27368D
2C60EF09110517C4D473A58F9163A256
29E302D8AC4079FF819BCB7EBBF81D62
E18D0555FFD5C93D5374DCD4513C88AA
8724EF544E247FD41DC21128B492F4F2
86EACE1D7289695CF08CCB560107953D
7CC512702E46A8EB311A87AD0FE29011
04FFA
88AA6F8CA532A7666F7C68FAAD9
F07348E241253EFF82DD7DE12CD0FAC9
A5CAD97F4F04E898CAFB8671DA8697AF
8EDC06F5CF6A26E370C81F6288AA10C7
D51D2BD8D4E11DA15CD91741545EB2E1
7EE695159C0CF382E0883388AA44A892
13B9CB70616A0E49F2D93CF843FCB3B5
94809DB837927D8612A0D43751354E0C
E9337BDCB939E2FFBF4B88AA01DDAB1B
E5D7E6B
88AA2B78C812E68F3EE884131
6C748A8042C443C0F1818607D39CB4D4
32B5417D72E201118FDDB91988AA664A
pour mentionnée le fichier est leng il porte 2MO
et pour claculate checksum je vien de le codez  et merci d'avance
le problem et comment extrairetout sa ?


mercredi 18 avril 2007 à 22:59:42 | Re : Extraire un block qui contien des chaines de caractere

jelume

Bsr,

Charger le fichier entier dans une chaîne de caractères
Remplacer tous les 88AA par un caractère spécial comme un ? par exemple
Utiliser la fonction ExtractStrings d Delphi en utilisant le caractère ? comme séparateur
Et dans le StringList résultat, chaque ligne contiendra un bloc de données

J-L

jeudi 19 avril 2007 à 02:22:59 | Re : Extraire un block qui contien des chaines de caractere

f0xi

Membre Club Administrateur CodeS-SourceS

non, car ? ($3F) est present dans le fichier. si la fin de bloc est 88AA alors a l'instar des EOF (0D0A) des fichiers texte il faut les respecter. de plus on ne peu pas se permettre de stocker du raw dans un string (a cause des $00 probable), au mieux, dans un pchar et encore le must etant un simple pointeur. en plus dans un string il nous faudrait jongler avec les convertions char > byte et string > integer, ce qui en terme de performance ne serait pas le plus adequate.

voici un exemple de lecteur, basé sur tlist.

ne pas oublier de bien liberer la TBlocList a la fin (avec FREE ou FreeAndNil) pour desallouer la memoire utilisée par les pointeurs et la liste.

type
  pBloc = ^TBloc;
  TBloc = record
    Buffer     : pointer;
    BufferSize : integer;
    CheckSum   : integer;
  end;

  TBlocList = class(TObject)
  private
    fList : TList;
    function GetCount : integer;
    function GetBloc(index : integer) : TBloc;
    procedure SetBloc(index : integer; val : TBloc);
  public
    constructor Create;
    destructor Destroy; override;
    property Items[index : integer] : TBloc read GetBloc write SetBloc;
    function Add(const Bloc : TBloc) : integer;
    procedure Delete(const index : integer);
    property Count : integer read GetCount;
    procedure FreeList;
    procedure SaveToFile(const FileName : string);
    procedure LoadFromFile(const FileName : string);
  end;

constructor TBlocList.Create;
begin
  inherited Create;
  fList := TList.Create;
end;

destructor TBlocList.destroy;
begin
  FreeList;
  fList.free;
  inherited Destroy;
end;

function TBlocList.GetCount : integer;
begin
  result := fList.Count;
end;

function TBlocList.GetBloc(index : integer) : TBloc;
var pBc : pBloc;
begin
  pBc := fList.items[index];
  result := pBc^;
end;

procedure TBlocList.SetBloc(index : integer; val : TBloc);
var pBc : pBloc;
begin
  pBc := fList.Items[index];
  with pBc^ do
  begin
    if Val.BufferSize <> BufferSize then
    begin
      FreeMem(Buffer, BufferSize);
      GetMem(Buffer, Val.BufferSize);
    end;
    CopyMemory(Buffer,Val.Buffer,Val.BufferSize);
    BufferSize := Val.BufferSize;
    CheckSum   := Val.CheckSum;
  end;
end;

function TBlocList.Add(const Bloc : TBloc) : integer;
var pBc : pBloc;
begin
  New(pBc);
  with pBc^ do
  begin
    GetMem(Buffer, Bloc.BufferSize);
    CopyMemory(Buffer, Bloc.Buffer, Bloc.BufferSize);
    BufferSize := Bloc.BufferSize;
    CheckSum   := Bloc.CheckSum;
  end;
  result := fList.Add(pBc);
end;

procedure TBlocList.Delete(const index : integer);
var pBc : pBloc;
begin
  pBc := fList.Items[index];
  with pBc^ do
    FreeMem(Buffer, BufferSize);
  Dispose(pBc);
  fList.Delete(index);
end;

procedure TBlocList.FreeList;
var N : integer;
    pBc : pBloc;
begin
  for N := fList.Count-1 downto 0 do
  begin
    pBc := fList.Items[N];
    with pBc^ do
      FreeMem(Buffer, BufferSize);
    Dispose(pBc);
    fList.Delete(N);
  end;
end;

procedure TBlocList.SaveToFile(const FileName : string);
var N   : integer;
    pBc : pBLoc;
    EOB : word;
begin
  EOB := $AA88;
  with TFileStream.Create(FileName, fmCreate) do
  try
    for N := 0 to fList.Count-1 do
    begin
      pBc := fList.Items[N];
      with pBc^ do
      begin
        WriteBuffer(Buffer^, BufferSize);
        WriteBuffer(CheckSum,4);
        WriteBuffer(EOB, 2);
      end;
    end;
  finally
    Free;
  end;
end;

procedure TBlocList.LoadFromFile(const FileName : string);
var BScan    : byte;
    N        : integer;
    COffset,
    LOffset  : int64;
    pBc      : pBLoc;
begin
  COffset := 0;
  LOffset := 0;
  with TFileStream.Create(FileName, fmOpenRead) do
  try
    for N := 0 to Size-1 do
    begin
      ReadBuffer(BScan, 1);
      if BScan = $88 then
      begin
        ReadBuffer(BScan, 1);
        if BScan = $AA then
        begin
          COffset := Position;
          Position := LOffset;
          New(pBc);
          with pBc^ do
          begin
            BufferSize := (COffset - LOffset) - 4;
            GetMem(Buffer, BufferSize);
            ReadBuffer(Buffer^, BufferSize);
            ReadBuffer(CheckSum, 4);
          end;
          fList.Add(pBc);
          Position := COffset;
          LOffset  := COffset;
        end;
      end;
    end;
  finally
    Free
  end;
end;

par contre j'ai tout fait de tête alors il se peu qu'il y ai des erreurs ou un manque de performance...
mais ça donne une approche du probleme.


Croc (click me)

jeudi 19 avril 2007 à 02:25:21 | Re : Extraire un block qui contien des chaines de caractere

f0xi

Membre Club Administrateur CodeS-SourceS

ah oui, je tiens a preciser que :

EOB := $AA88 n'est pas une erreur car les bytes sont inversé lors de l'ecriture.
on retrouvera bien 88AA dans le fichier :)


Croc (click me)

mardi 1 mai 2007 à 18:42:12 | Re : Extraire un block qui contien des chaines de caractere

Napster

salut ,
merci baucoup fOXI , tu peu me dire comment utuliser cette source ya pleins d'erreur 
je l'ais fait dans un Unit2 et je lais declarer dans les uses du Form .
j'ai eu plein d'erreur comme
fList :TList ; sa n'existe pas // erreur (9)




Cette discussion est classé dans : chaines, extraire, checksum, block, contien


Répondre à ce message

Sujets en rapport avec ce message

Calculateur de Block dans une Chaine de caractere [ par Napster ] salut , j'ai un petit souci a ce calculateur de CRC32 voila un extrait de ma source binaire : 55 AA 01 01 00 17 17 6C 01 73 29 34 21 15 5A 5A00 00 7F aide moi a extraire un ficher exe! [ par zizoutec ] salut les experts :-)je suis nouveu sur c'est joli site et j'espere que je trouverai  l'aide..bon mon  probeleme un ficher registre mais  je peux pas extraire le moi ou annee d'une date longe [ par dhsofa ] bonjour, j'ai un code qui donne le moi et l'annee d'une date longue exemple (10/11/2008)ce code est ecrit en clipper, est vous pouvez m'aidez de trans Extraire des Frames d'une vidéo [ par benzebuth666 ] Bonjour,Je voudrais pouvoir extraire des frames d'une vidéo, lue dans un Tpanel et controlée par un Tmediaplayer.En fait, je veux faire un bouton qui Comment extraire le text d'un item de listbox [ par vieuxpere ] Bonjour, je souhaiterai savoir comment extraire le text de l'item sur lequel je suis actuellement positionnée sur unelistbox.Quelque chose du genre : Extraire 1 chaine a/ "substring()" a/ 1TAdoQuery [ par 810mcu ] Bonjour a tout le monde, J ai regardé sans succès, Extraire le répertoire de l’EXE si réseau [ par 810mcu ] Salut à tous,   <p class="MsoNorma Extraire des tags HTML [ par BinOff ] Voilà, je commence avec un fichier HTML ouvert en tant que source dans un memo1.Je souhaiterais extraire les noms des images incluses dans le source H Date : comment extraire le jour de la semaine ? [ par DAR ] La fonction "DecodeDate" retourne le jour, le mois et l'année d'une date, mais comment faire pour connaitre le jour de la semaine correspondant : lund ExtracIcon : Help [ par Bruto ] Salut,je voudrais extraire l'icône du programme sélectionné mais ma procedure n'est pas bonne. Pour extraire, j'utilise la fonction ExtractIcon:functi


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.