begin process at 2012 05 28 23:06:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Convertion c++ à VB


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

Convertion c++ à VB

dimanche 19 novembre 2006 à 05:34:35 | Convertion c++ à VB

jnbrunet

Bonjours,
Je ne suis pas très connaissant en c++.
Est-ce que quelqu'un pourrait me traduire cette fonction en Visual Basic 6.0 ou .NET.
P.S.: le pucData est en général à l'adresse 0C en hexadécimal dans le fichier.

// pucData - pointer to the byte stream of the .d2s file
// iSize - number of bytes in the stream ( filesize )

void Checksum( unsigned char *pucData, int iSize )
{
// delete old checksum at offset 0x0C (0C est l'adresse des valeurs changer. On doit mettre les 8 bits
*((unsigned int*)(pucData+12)) = 0;
// init new checksum with 0
unsigned int uiCS = 0;
// this is the whole checksum calculation
for ( int i = 0; i < iSize; ++i )
uiCS = (uiCS<<1) + pucData[i] + ( uiCS & 0x80000000 ? 1 : 0 );
// write new checksum to stream
*((unsigned int*)(pucData+12)) = uiCS;
}

Voiçi un autre fonction en c++ qui devrait faire la même chose que celui du haut, mais n'est pas réaliser par le même programmeur:
Autre fonction identique:
void Character::calculateChecksum()
{
   // make sure we start at the beginning of the file
   std::rewind(charfile);

   Checksum = 0;

   unsigned char data, overflow = 0;

   for (unsigned long i = 0; i < FileSize; ++i)
   {
      // doubles the checksum result by left shifting once
      Checksum <<= 1;

      std::fread(&data, sizeof(data), 1, charfile);

      Checksum += data + overflow;

      if (Checksum < 0)
         overflow = 1;
      else
         overflow = 0;
   }

   // rewind the file in case we need to read/write to it again
   std::rewind(charfile);


Je ne vous force pas!! C'est seulement un petit service que je vous demande!!

J'ai beau lire et relire les 2 fonctions, je ne les comprend pas! En tout cas, merci à ceux qui auront la gentillesse de m'aider!

Merci!

-Jn-
dimanche 19 novembre 2006 à 14:58:53 | Re : Convertion c++ à VB

NairodDorian

Bonjour,

Convertion de la methode deux :

Imports System.IO

   Dim FileSize As Integer ' doit etre defini dans une autre methode
    Dim br As BinaryReader  ' doit etre initialiser dans une autre methode

    Sub CalculateCheckSum()

        ' Exemple : Initialisation variable br
        ' Dim fs As New FileStream("C:\\fichier.bin", FileMode.OpenOrCreate)
        ' Dim br As BinaryReader = New BinaryReader(fs)
        br.BaseStream.Position = 0

        Dim checksum As Integer
        Dim data As Byte
        Dim overflow As Byte

        For i As Long = 0 To i < FileSize
            data = br.ReadByte()
            checksum = checksum + data + overflow
            If checksum < 0 Then
                overflow = 1
            Else
                overflow = 0
            End If
        Next

      br.BaseStream.Position = 0

    End Sub

dimanche 19 novembre 2006 à 23:37:45 | Re : Convertion c++ à VB

jnbrunet

Salut,
merci pour cette réponse.

Lorsque je l'aissai sur un fichier, checksum me donne 0. Pourtant le fichier n'est pas vide... Pour trouver la grosseur, j'utilise FileSize = CInt(FileLen(FilePath)).

Au fait, que fait cette ligne en c? :

Checksum <<= 1;

Merci

-Jn-
lundi 20 novembre 2006 à 08:40:20 | Re : Convertion c++ à VB

Renfield

Administrateur CodeS-SourceS
il multiplie par deux checksum...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
lundi 20 novembre 2006 à 14:16:30 | Re : Convertion c++ à VB

jnbrunet

Merci de la réponse, mais ce n'est pas ça. J'ai résolu le problème.

Pour ceux qui veulent le savoir, chiffe << 1 est un bit shift. Il pousse toute les bits de un vers la gauche dans l'octet sélectionné. Par exemple,

00110010 << 1 donne : 01100100

Dans l'algorithme, on additionne tous les bits de 2 octets, ensuite on "bitshift" de 1 vers la gauche le résultat, et on continue. Ce qui donne en vb:

        FileSize = CInt(FileLen(FilePath))
        br.BaseStream.Position = 0

        Do While i < FileSize
            data = br.ReadByte() ' on lit l'octet

            checksum = checksum << 1 'on bitshift vers la gauche de 1

            checksum = checksum + data + overflow ' on addition l'octet séléctionné

            If checksum < 0 Then ' on vérifi s'il y a dépassement
                overflow = 1
            Else
                overflow = 0
            End If
            i = i + 1
        Loop

-Jn-
lundi 20 novembre 2006 à 14:23:09 | Re : Convertion c++ à VB

Renfield

Administrateur CodeS-SourceS
00110010 => 50 en base 10
01100100 => 100 en base 10

on a donc bien multiplié par deux...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
lundi 20 novembre 2006 à 22:33:51 | Re : Convertion c++ à VB

jnbrunet

Oui c'est bien une multiplication, mais je demandais une explication... pas un synonyme. À ce que je sache, bitshift ne veux pas dire multiplication. Je voulais comprendre ce que faisais le "<<". Oui ca revient bien à une multiplication, mais ce n'est pas la définition exacte. Dans un examen j'aurais eu un beau 0!

-Jn-
mardi 21 novembre 2006 à 08:46:15 | Re : Convertion c++ à VB

Renfield

Administrateur CodeS-SourceS

ok sur la définition....

j'étais resté sur le "que fait cette ligne" et t'ai donc donné une "lecture" de la ligne

Renfield
Admin CodeS-SourceS- MVP Visual Basic
mercredi 22 novembre 2006 à 14:26:41 | Re : Convertion c++ à VB

NairodDorian

Zut j'ai oublié checksum = checksum << 1 dans ma réponse :P


Cette discussion est classée dans : int, to, checksum, unsigned, pucdata


Répondre à ce message

Sujets en rapport avec ce message

Allocation de mémoire a une structure [ par KurpeusLondon ] Bonjour, J'essaye d'initialiser des structures par un appel de fonction qui retourne l'adresse mémoire de la structure fraichement crée. Lorsque je co unsigned to int [ par wislam2007 ] Salut j'ecrit dans mon code : string a="machin"; int taille = a.length(); ça passe pas : erreur c2440 :error unsignet to int :( merci pr l aide. A v OpenGl bloqué par une Thread !? [ par spinzero ] Bonjour  J'ai une animation (win32) OpenGL à laquelle j'essaie d'intégrer de la synthese sonore avec la lib STK.(...a Ecriture d'un fichier BMP "à l'ancienne" [ par MaxSoldier ] Salut à tous ! N'ayant pas pus résoudre mon prblème seul, je m'en réfère à vous !Je m'explique, je cherche à écrire un fichier BMP à l'ancienne, c'est Problème en tête bitmap [ par piroman14 ] Slt tt le monde!Je rencontre un petit problème dans mon algorithme. En effet, je n'arrive pas à coder l'en-tête d'une image bitmap correctement. J'obt c++ [ par gilles8111 ] salut,je suis débutant en c++,j'ai jusqu'ici toujours programmé en java. Mon problème est le suivant: j'ai implémenté une classe CSpieler dont le cons quadtree [ par pulsaqui ] Bonjour; je suis un débutant en programation C++ . Je cherche une implantation d'une class Quadtree class Quadtree { public: Quadtree() Envoie de données vers un serveur en langage C [ par esmee ] Bonjour,Besoin d'aide,Débutant en programmation , j'aimerai  modifié ce code ci-dessous qui fonctionne bien :write(to_server_socket,"Momo",15);read(to c++ [ par zizota ] bonsoir,je suis débutante en c++ et j'ai trouvé  un code sur netmais j'ai rien compriunsigned int index;      unsigned long int count[2];   index = (u unsigned long int [ par W@$h! ] saluje pense que tout le monde sait faire ça : int valeur = 4;printf("%i", valeur);mais quelqu'un peut'il me dire comment faire pour afficher un unsig


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,593 sec (3)

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