Accueil > Forum > > > > traduction C++ ==> vb2005
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
|
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 a As UInt32
x = 0 While x < 256 a = x << 24 For i = 0 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
|
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(255) As Integer Dim Buffer(2097151) As 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 F As System.IO.FileStream Dim s 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 i As Integer Dim result As String
i = 0 Result = "" While (i < 16) And (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 << 8) Xor (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 s 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 = 0 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
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|