Solide bug dans les bytes (Hex BUG inside)

Archive.
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Solide bug dans les bytes (Hex BUG inside)

Message par LeCyb »

Voilà j'ai un buffer contenant des bytes non-signés que je reçoit d'un serveur (d'où le $FF plus loin).
Je vais chercher certains bytes ensuite je les affiche.

Alors j'ai remarqué un bug assez impressionnant et je capte vraiment plus rien.

Code : Tout sélectionner

*buffer = AllocateMemory(5)
PokeB(*Buffer,$AA)
PokeB(*Buffer + 1,$01)
PokeB(*Buffer + 2,$C0)
PokeB(*Buffer + 3,$02)
PokeB(*Buffer + 4,$99)

Debug Hex($FF & PeekB(*Buffer))
Debug Hex($FF & PeekB(*Buffer + 1))
Debug Hex($FF & PeekB(*Buffer + 2))
Debug Hex($FF & PeekB(*Buffer + 3))

var1 = PeekB(*Buffer)
var1 & $FF

var2 = $FF & PeekB(*Buffer + 1)

var3.b = PeekB(*Buffer + 2)
var3 & $FF

var4.b = $FF & PeekB(*Buffer + 3)

Debug Hex(var1)
Debug Hex(var2)
Debug Hex(var3)
Debug Hex(var4)

FreeMemory(*Buffer)
Alors pourquoi quand on précise une variable en tant que byte elle affiche un long alors que si on ne précise rien elle nous donne bien un byte ?

Moi j'essaye au maximum de suivre la doc qui précise bien ".b" pour un byte, alors est-ce moi qui faute ou bien est-ce un (fameux) bug ?
Dernière modification par LeCyb le lun. 08/août/2005 20:55, modifié 1 fois.
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est peut être Hex() qui bug...

Code : Tout sélectionner

*buffer = AllocateMemory(5)
PokeB(*Buffer,$AA)
PokeB(*Buffer + 1,$01)
PokeB(*Buffer + 2,$C0)
PokeB(*Buffer + 3,$99)

Debug Hex($FF & PeekB(*Buffer))
Debug Hex($FF & PeekB(*Buffer + 1))
Debug Hex($FF & PeekB(*Buffer + 2))
Debug Hex($FF & PeekB(*Buffer + 3))

Debug "---------------"

var1 = PeekB(*Buffer)
var1 & $FF

var2 = $FF & PeekB(*Buffer + 1)

var3.b = PeekB(*Buffer + 2)
var3 & $FF

var4.b = $FF & PeekB(*Buffer + 3)

Debug Hex(var1)
Debug Hex(var2)
Debug Hex(var3)
Debug Hex(var4)

Debug "---------------"

Debug var1
Debug var2
Debug var3
Debug var4

FreeMemory(*Buffer)
Dri
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Bien vu ça.

Donc si je comprends bien Hex ne supporte pas les valeurs négatives ou non-signées.

Est-ce que le bug existe toujours dans la version 3.94 ?

Si oui, comment je peux corriger le tir plus proprement qu'en oubliant de préciser le type ?
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Ma modif de ton code c'est sur la version 3.94 beta 4 alors le probleme est toujours d'actualité... Pour le moment ce que tu peux faire c'est te coder une fonction Hex() maison pour être sûr de ne pas avoir de problème...
Si tu mle demande jpeux te le faire ;)

Dri
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je viens de cerner le problème... En PB tout est signé, et la fonction Hex() renvoi une chaîne non signée. Le passage de byte pose donc problème pour la raison que voici :

Code : Tout sélectionner

b.b = $FF
l.l = b

Debug b
Debug l
;à ton avis ca donne quoi -1 pour un long ?
Dri ;)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Voila une rustine... Une structure de conversion de Byte en Long, sans tenir compte du signe... On peut faire la même chose entre un word et un long et entre un byte et un word...

Code : Tout sélectionner

Structure Ub2Ul
  StructureUnion
    Ub.b
    Ul.l
  EndStructureUnion
EndStructure

nombre.Ub2Ul

For i = $00 To $FF
  nombre\Ub = i
  Debug Hex(nombre\Ul)
Next i
Là il est clair que PB doit inclure des nombres non-signés de facon native parce que là ca complique pas mal de choses... PB4 peut-être ? Fred ?

Dri
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je viens aussi de me rapeller de l'astuce de Fred vis à vis de ce problème...

Code : Tout sélectionner

For i = 0 To 255
  b.b = i
  Debug Hex(b & $FF)
Next i
Dri
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Je serais pas contre une petite fonction Hex2() :D

Mais bon pour le moment je me contenterai de mettre mes bytes dans des longs sinon je vais griller tous les neurones de Dri (private joke).
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

n'empêche que c'est quand mes neuronnes ont lâché ke je me suis souvenu de la solution de Fred à savoir la plus simple...

Dri
Répondre