begin process at 2010 02 10 06:46:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Algorithme

 > 

Compression & Cryptage

 > 

traduction C++ ==> vb2005


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

traduction C++ ==> vb2005

vendredi 29 février 2008 à 18:08:39 | traduction C++ ==> vb2005

greg38bj

Bonjour à tous
je viens de recupérer un code dont j'ai besoin pour faire un p'tit soft, le seul problème, est que c'est programmé en C++,
et que moi je develloppe en vb2005 express.
Y aurait_il sur le forum une bonne âme suffisemment calé en c++ et vb pour me faire une traduction approximative ?
je vous joins un bout du code :

procedure Generate_CRC_Table(Seed:longword);
var x,i:word;
    a:longword;
begin
   x:=0;
   while (x<256) do
     begin
       a:=x shl 24;
       for i:= 0 to 7 do
        begin
           if (a and $80000000)= $80000000 then
             begin
               a:= a + a;
               a:= a xor Seed;
             end
           else
             begin
               a:= a shl 1;
             end;
        end;
       CRC_Table[x]:=a;
       inc(x);
     end;
end;


@+
greg38bj
vendredi 29 février 2008 à 19:57:42 | Re : traduction C++ ==> vb2005

casy

Membre Club
Réponse acceptée !
Déjà, apparement ce n'est pas du C++ mais plutot du Delphi.

Ensuite convertie en VB2005 ça devrait donner, je pense quelque chose du genre :


Public Sub Generate_CRC_table(ByVal Seed As UInt32)
Dim x, i As UInt16
Dim As UInt32

        x = 0
        While x < 256
          a = x << 24
          For i = To 7
                If (a And &H80000000) = &H80000000 Then
                  a = a + a
                  a = a Xor Seed
                Else
                  a = a << 1
                End If
          Next
          CRC_Table(x) = a
          x += 1
        End While

End Sub



Par contre, on ne connais pas la définition de CRC_Table[x]. En VB2005, il devra etre déclaré de la sorte :
 Dim CRC_Table(UInt16.MaxValue - 1) As UInt32

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 29 février 2008 à 21:06:52 | Re : traduction C++ ==> vb2005

greg38bj

salut
voici ce qui précedait le code :

var CRC_Table : array[0..255] of longword;
var BinSize:longword;

et voici une partie de la suite :
var Buffer : array[0..2097151] of byte; // Max size of a flash

procedure TFormMain.cmdFileOpenClick(Sender: TObject);
var F:TFileStream;
    s:string;
begin
  if OpenDialogBin.Execute then
    begin
      F:=TFileStream.Create(OpenDialogBin.FileName,fmOpenRead);
      F.Read(Buffer,F.Size);
      BinSize:=F.Size;
      F.Free;
      cmdFileOpen.Caption:=ExtractFileName(OpenDialogBin.FileName);
      memo.Clear;
      s:='File size = '+ inttostr(BinSize)+ ' bytes ( '+inttostr(round(BinSize/1024))+' kB )';
      if BinSize <= 2031616 then
         s:=s+' - User Data Saved'
      else
         s:=s+' - User Data Overwitten';
      memo.Lines.Add(s);
      FixCRC;
    end
  else
   cmdFileOpen.Caption:='Click to select a file...';
end;

function Get4Bytes(adr:longword):longword;
begin
  Result:=Buffer[adr] shl 24 + Buffer[adr+1] shl 16 + Buffer[adr+2] shl 8 + Buffer[adr+3];
end;


function BufferGetString(adr:longword):string;
var i:integer;
begin
   i:=0;
   Result:='';
   while (i<16) and (buffer[adr+i]<>0) do
    begin
     Result:=Result+chr(buffer[adr+i]);
     inc(i);
    end;
end;

function TFormMain.CalculateCRC(Start,Stop:longword):longword;
var CRC : longword;
    i:integer;
begin
   i:=Start;
   CRC := $FFFFFFFF;
   while (i <= Stop) do
      begin
       CRC := (CRC shl 8) xor (CRC_table[buffer[i] xor (CRC shr 24)]);
       inc(i);
      end;
   Result := CRC;
end;


procedure TFormMain.FixCRC;
var BlockID,offset,len,crc,newCRC:longword;
    ptr:longword;
    s:string;
begin
  Generate_CRC_Table(FidMergerSeed);
  Memo.Lines.Add('CRC Table Calculated!');
  ptr:=0;
  BlockID:=Get4Bytes(ptr);
  Memo.Lines.Add('BlockID = '+inttohex(BlockID,8));
  if BlockID = $E3000010 then
    begin
      Memo.Lines.Add('Boot loader -> NO CRC');
      Buffer[12]:=ord('N');
      Buffer[13]:=ord('C');
      Buffer[14]:=ord('R');
      Buffer[15]:=ord('C');
    end;
  offset:=Get4Bytes(ptr+8);
  ptr:=offset;
  // check for rest
  while (PTR+16 < BinSize) do
    begin
      BlockID:=Get4Bytes(ptr);
      len:=Get4Bytes(ptr+4);
      offset:=Get4Bytes(ptr+8);
      CRC:=Get4Bytes(ptr+12);
      s:='BlockID = '+inttohex(BlockID,8);
      s:=s+' SIZE = '+inttohex(len,8);
      s:=s+' OFFSET = '+inttohex(offset,8);
      s:=s+' Actual CRC = '+inttohex(crc,8);
      Memo.Lines.Add(s);
      s:='Bloc Name = '+BufferGetString(ptr+16);
      s:=s+' Version = '+BufferGetString(ptr+32);
      s:=s+' Date = '+BufferGetString(ptr+48);
      Memo.Lines.Add(s);
      newcrc:=CalculateCRC(ptr+16,ptr+16+len-1);
      s:='Calculate CRC = ' + inttohex(newcrc,8);
      if newCRC = CRC then
        s:=s+' - CRC OK!'
      else
        s:=s+' - CRC FAIL!';
      memo.Lines.Add(s);
      // Fix CRC
      if offset=0 then
       ptr:=ptr+len
      else
       ptr:=ptr+offset;
    end;
cet algo permet le decryptage du crc de plusieurs fichiers sur lesquels je bosse en ce moment
merci encore

@+
greg38bj
lundi 3 mars 2008 à 11:47:14 | Re : traduction C++ ==> vb2005

casy

Membre Club
Réponse acceptée !
légé abus de ta part tout de même. Mais bon, maintenant avec es 2 exemples, tu doir etre capable de traduire le reste du code, s'il t'en reste.

 Dim CRC_Table(255As Integer
  Dim Buffer(2097151As Byte ' Max size of a flash
  Dim BinSize As Integer

  Private Sub cmdFileOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFileOpen.Click
    Dim As System.IO.FileStream
    Dim As String

    Dim ofd As New OpenFileDialog
    If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
      F = New System.IO.FileStream(ofd.FileName, IO.FileMode.Open)
      F.Read(Buffer, 0, F.Length)
      BinSize = F.Length
      F.Close()
      cmdFileOpen.text = System.IO.Path.GetFileName(ofd.FileName)
      memo.Clear()
      s = "File size = " & BinSize.ToString & " bytes ( " & (BinSize / 1024).ToString + " kB )"
      If BinSize <= 2031616 Then
        s = s & " - User Data Saved"
      Else
        s = s & " - User Data Overwitten"
      End If
      memo.Text = memo.Text & s & Environment.NewLine
      FixCRC()
    Else
      cmdFileOpen.Text = "Click to select a file..."
    End If
  End Sub

  Function Get4Bytes(ByVal adr As Integer) As Integer
    Return CInt(Buffer(adr)) << 24 + CInt(Buffer(adr + 1)) << 16 + CInt(Buffer(adr + 2)) << 8 + CInt(Buffer(adr + 3))
  End Function


  Function BufferGetString(ByVal adr As Integer) As String
    Dim As Integer
    Dim result As String

    i = 0
    Result = ""
    While (i < 16And (Buffer(adr + i) <> 0)
      result = result & Chr(Buffer(adr + i))
      i += 1
    End While
    Return result
  End Function

  Function CalculateCRC(ByVal Start As Integer, ByVal iStop As Integer) As Integer
    Dim CRC, i As Integer

    i = Start
    CRC = &HFFFFFFFF
    While (i <= iStop)
      CRC = (CRC << 8Xor (CRC_Table(Buffer(i) Xor (CRC >> 24)))
      i += 1
    End While
    Return CRC
  End Function


  Private Sub FixCRC()
    Dim BlockID, offset, len, crc, newCRC, ptr As Integer
    Dim As String

  Generate_CRC_Table(FidMergerSeed);
    memo.Text = memo.Text & "CRC Table Calculated!" & Environment.NewLine
    ptr = 0
    BlockID = Get4Bytes(ptr)
    memo.Text = memo.Text & "BlockID = " Hex(BlockID).PadLeft(8"0"c) & Environment.NewLine
    If BlockID = &HE3000010 Then
      memo.Text = memo.Text & "Boot loader -> NO CRC" & Environment.NewLine
      Buffer(12) = Asc("N")
      Buffer(13) = Asc("C")
      Buffer(14) = Asc("R")
      Buffer(15) = Asc("C")
    End If
    offset = Get4Bytes(ptr + 8)
    ptr = offset
    ' check for rest
    While (ptr + 16 < BinSize)
      BlockID = Get4Bytes(ptr)
      len = Get4Bytes(ptr + 4)
      offset = Get4Bytes(ptr + 8)
      CRC =Get4Bytes(ptr+12);
      s = "BlockID = " Hex(BlockID).PadLeft(8"0"c)
      s = s + " SIZE = " Hex(len).PadLeft(8"0"c)
      s = s + " OFFSET = " Hex(offset).PadLeft(8"0"c)
      s = s + " Actual CRC = " Hex(crc).PadLeft(8"0"c)
      memo.Text = memo.Text & s & Environment.NewLine
      s = "Bloc Name = " + BufferGetString(ptr + 16)
      s = s + " Version = " + BufferGetString(ptr + 32)
      s = s + " Date = " + BufferGetString(ptr + 48)
      memo.Text = memo.Text & s & Environment.NewLine
      newCRC = CalculateCRC(ptr + 16, ptr + 16 + len - 1)
      s = "Calculate CRC = " Hex(newCRC).PadLeft(8"0"c)
      If newCRC = crc Then
        s = s & " - CRC OK!"
      Else
        s = s & " - CRC FAIL!"
      End If
      memo.Text = memo.Text & s & Environment.NewLine
      ' Fix CRC
      If offset = Then
        ptr = ptr + len
      Else
        ptr = ptr + offset
      End If
    End While
  End Sub



Attention, c'est de la traduction ligne à ligne. Aucune garantie de fonctionnement, c'est à toi de débugger tout ça maintenant.


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
lundi 3 mars 2008 à 19:13:21 | Re : traduction C++ ==> vb2005

greg38bj

salut
et merci Casy
en fait, j'avais avancé de mon côté et traduit ces lignes de code, j'étais presque arrivé au même résultat ...
Si j'ai insisté et abusé, c'est parce que ça ne marche pas du tout
je me trouve avec des depassement de capacité, des index hors du tableau etc ...
Après avoir navigué sur la toile, je me suis rendu compte que c'est un problème récurrent en vb.
j'essaye donc maintenant de contourner ces problèmes ...
Le code que je t'ai envoyé ci-dessus en deux fois est complet pour cette partie du soft.
Donc encore une fois, merci de ta patience et pour la solution apportée et désolé d'avoir abusé

@+
greg38bj
jeudi 11 décembre 2008 à 10:39:03 | Re : traduction C++ ==> vb2005

math467

est-ce que quelqu'un serait assez sympathique pour me traduire cette expression en vb.net : var i:byte; begin listbox1.Sorted:=false; listbox1.Sorted:=true; i:=0; while i<(listbox1.Items.Count-1)-i do begin listbox1.Items.Exchange(i,(listbox1.Items.Count-1)-i); inc(i); end; end;
jeudi 11 décembre 2008 à 10:40:56 | Re : traduction C++ ==> vb2005

math467

var i:byte; begin listbox1.Sorted:=false; listbox1.Sorted:=true; i:=0; while i<(listbox1.Items.Count-1)-i do begin listbox1.Items.Exchange(i,(listbox1.Items.Count- 1)-i); inc(i); end; end;


Cette discussion est classée dans : end, code, begin, vb2005, traduction


Répondre à ce message

Sujets en rapport avec ce message

Textbox [ par Benzoid ] Je veux lorsque je tape . sur le clavier que le prog me mette 0, dans la textbox et la variable varMon problème est que le curseur avec mon code se re Petit probleme sous excel [ par ririwin ] je veux me rendre a la derniere ligne paqs ecrite sur excel le seul moyen que g trouver c celui la, ya pas plus simple.MerciPrivate Sub CmdEcrire_Clic probleme de variable (enfin je pensse) [ par raphy2 ] voila jai mon programme y m arrondie tout a la troncature par exemple 31/2 = 15 et comme j'ai rien compris au variables je pensse que c ca .voila mon ActiveX container scrollbar probleme [ par nhervagault ] Voici un extrait d'un code qui bugge légèrement ;-)Alors c'est un controle activex "container" qui contient simplement un controle scrollbar verticalI prob vider corbeille [ par quitues ] Salut à tous, j'ai un problème avec le code pour vider la corbeille.je crois l'avoir bien mis mais Visual Basic marque :"Erreur de compilation:Seuls d masquer le code source [ par regdobey ] Bonjour,j'ai récupéré ce morceau de code(ci-après). D'après l'auteur cela doit masquer le feuilles de code ...Apparemment, ça ne marche pas ...Quelqu' pourquoi ce code ne marche pas ? [ par hhhp2004 ] hhhp2004Private Sub Text1_Change()If Text1.Text = ("quitter" + Text1.Text) ThenEndEnd IfEnd Sub Bip sur textbox [ par BasicInstinct ] 'lut a toisur mes textbox, j'ai un truc du style:Private Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Text2.SetFocusEnd If<br etats avec datareport [ par kazimir ] bonjour à tous,j'ai trouvé ici même un petit bout de code bien sympathique: http://www.vbfrance.com/code.aspx?ID=2273j'ai adapté ce code à ma sauce, m pb datagrid : reremplir (urgent, merci d'avance) [ par stuffparadiz ] salut a tous après avoir cherché pendant deux jours comment on fait pour rmeplir le datagrid. Maintenant j'ai trouve mais le probleme c'est que si je


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales