nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004
-
9 juil. 2003 à 12:15
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004
-
10 juil. 2003 à 15:45
j'ai reçu un programme en C++ réalisant un décodage de chaine de caractère en ascii et je n'ai pas réussi à retrouver le bon résultat avec le prog que j'ai fait en VB.
Si quelqu'un pourrait m'aider,cf fichier texte avec les 2 prog
résultat attendu AA9F.
Merci d'avance à ceux qui porrait m'aider,c cool.
unsigned short calcCRC16(unsigned char* pBuffer,int nBufferLen)
{
const unsigned short usPoly=0x8408;
unsigned short usCRC=0;
int bParite;
int i,j;
//fonction principale
/////////////////////
int main(int argc,char* argv[])
{
char szBuffer[]= "2506031555224--------------------------S----1--------------------------------------------------";
unsigned short usCRC16;
voici maintenant ce que j'ai fait en vb mais je n'obtiens pas la bonne valeur avec nbufferlen=95
Private Function calcCRC16(pBuffer As String) As String
usPoly = 8408
Dim usCRC As String
Dim j, k, bParite As Integer
If (usCRC Mod 2 = 1) Then
bParite = 0
Else
bParite = 1
usCRC = (usCRC / 2) - 1
End If
If bParite = 0 Then
usCRC = usCRC Xor usPoly
End If
Next
Next
End Function
''''''''''''''''''''''''''''
Private Function calcCRC16()
Dim nBuffer As String
Dim usCRC16 As String
pBuffer = "2506031555224--------------------------S----1--------------------------------------------------"
usCRC16 = calcCRC16(nBuffer)
MsgBox usCRC16
If usCRC16 = strcecksum Then
MsgBox(" Le fichier a été authentifié!",vbOkOnly +vbInformation , "Authentification")
Else
MsgBox(" Le fichier n'est pas conforme!",vbCancel +vbCritical , "Authentification")
End Sub
cs_Cho7Kipu
Messages postés31Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention20 octobre 2003 9 juil. 2003 à 12:48
Il me parait bizzare comme ca a premiere vu ton code...
Déjà le polymorphisme comme ca en VB chui pa sur ke ca passe... a mon avis il va falloir renommer une des 2 fonctions sinon yaura ambiguité.
Ensuite un truc ki n'a rien a voir, mé j'crois ke les parenthese dans une MsgBox kan celle ci est n'est pas a droite d'un signe '=' constitue un erreur de syntaxe... ca aussi, c'est a verifier...
pi le code C++ me parait aussi bizzare lol
C un copié collé exact du code original ?
car ya une virgule en trop dans le printf...
Et ta 1ere fonction requiert un unsigned char * alors ke dans ton main tu lui fous un char *, donc là aussi ca coince, fo retirer le unsigned.
Mais sinon ca doit etre bon, mé comment t'a fé pour compiler ce code c++ sans corriger ca ? il en a bien voulu le monsieur ??
bref je v jetter un oeil a tout ca...
je reviens vite
cs_Cho7Kipu
Messages postés31Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention20 octobre 2003 9 juil. 2003 à 12:58
Ouhla, en le mettant dans le compilateur g eu peur !!
Y a rien ki marche dans le code VB, tout ce ke g dit plu haut etait vérifié, en + les blocs conditionnels IF sont jamais fermé, tu met un end sub au lieu d'un End function, tu fé une comparaison Xor avec une chaine de texte, bref c la merde total !!!
Bon jv essayer de néttoyer tout ca, mé là ca va me compliker le boulot jv tout reprendre ca va aller plus vite..
cs_Cho7Kipu
Messages postés31Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention20 octobre 2003 9 juil. 2003 à 13:22
bon j'abandonne
c pa possible que tu puisse te contenter de dire
"voici maintenant ce que j'ai fait en vb mais je n'obtiens pas la bonne valeur"
T'auré pu dire : "je n'arrive pa a le compiler !"
C truffé de faute
a chak ligne yen a une nouvelle
erreur de syntaxe, variables inexistantes (genre la variable argv, tout droit sortie de chez pas ou !!)
ensuite tu va nous comparer tout ca avec une variable strcecsum dans le main, alors que cette variable elle est vide
ensuite ta fonction ne retourne rien,
car en VB pour retourner la valeur il fo a la fin du code de la fonction indiquer une ligne comme celle ci :
le_nom_de_ma_fonction=valeur_de_retour
bon bref tu l'auras compris, je sé pas si tu es nouveau en VB mais là fo prendre des cours parce ke c pa simplement des erreur de logique, c aussi, et surtout des erreurs de syntaxes et des variables farfelues, directement sorties de ta conversion c++, le argv tu peu l'oublier, c destiné au prog c++ pour stocker la ligne d'arguments ki sont transmis au programme kan il est ouvert, dans ton prog VB on s'en tappe carrément. Mais jpige pas, tu te servais pas de argv avant, et dans le VB tu t'es senti obligé de la mettre, vraiment jpige pas... bref
Allez bonne continuation
Si ya d'otr kestion je reste malgré tout a ta disposition
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 9 juil. 2003 à 16:01
ok je comprends que tu ai halluciné j'ai balancer le mauvais code, je suis nouveau en vb mais la c'était abuser.Le code en C++ marche bien je l'ai tester.
Voici mon vrai code il est peut etre pas mieux mais au moins il compile ,je te remercie d'y jeter un oeil,c très cool 2 ta part:
unsigned short calcCRC16(unsigned char* pBuffer,int nBufferLen)
{
const unsigned short usPoly=0x8408;
unsigned short usCRC=0;
int bParite;
int i,j;
//fonction principale
/////////////////////
int main(int argc,char* argv[])
{
char szBuffer[]= "2506031555224--------------------------S----1--------------------------------------------------";
unsigned short usCRC16;
cs_Cho7Kipu
Messages postés31Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention20 octobre 2003 9 juil. 2003 à 19:55
Voilà le code eclaircit au mieux. le resultat colle toujours pas, mais g isolé la ligne ki coince. Reste plus k'a savoir pk elle coince. je pense que c un probleme de type de variable, a savoir ke visual basic n'offre pas a ma connaissance de type equivalent a "unsigned short", et de ce fait génere des nbres ki peuvent négatif alors que le cplusplus trouvera des positifs...
bref voilà le travail
bonne chance
(je reste néanmoin a ta disposition ;-))
++
la tite cho7
Sub main()
MsgBox calcCRC16("2506031555224--------------------------S----1--------------------------------------------------")
End
End Sub
Private Function calcCRC16(pBuffer As String) As Long
Dim k, usCRC, usPoly As Long
Dim i, j, bParite As Integer
usCRC = 0
usPoly = &H8408
For k = 1 To Len(pBuffer)
i = Asc(Mid(pBuffer, k, 1))
usCRC = (usCRC Xor i)
For j = 0 To 7
If (usCRC And 1) Then
bParite = 0
Else
bParite = 1
End If
usCRC = (usCRC / 2) 'ligne problèmatique------------------------------------
'pourtant le code cplusplus suivant : usCRC>>=n
'equivaut bien à : usCRC = usCRC / 2^n
'Peut etre a cause du type unsigned short... a eclaircir
'-------------------------------------------------------
If (bParite 0) Then usCRC (usCRC Xor usPoly)
nikostaf
Messages postés35Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 5 mai 2004 10 juil. 2003 à 15:45
merci pour ton aide je vois ou se situe le prob, je sais pas encore comment je vais faire pour contourner le délire ou s'il y a une astuce VB,enfin je cherche.Merci pour tout