Page 1 sur 1

[HS] [Excel] [VBA]

Posté : 06 janv. 2019, 18:09
par MiGaNuTs
Bonjour a tous.

J'ai une question un peu hors sujet, mais pas tant que ça.
J'ai besoin d'une fonction excel qui a partir de 2 octets (0-255 donc) me retourne la valeur du signed int qui corresponds.
tant que mon octet de poids fort est <128, pas de problème, c'est facile, c'est 256*poidsfort + poidsfaible
Mais quand mon poids fort est >=128 ca devient chiant a cause du signe, et je patine dans la semoule.
J'ai écrit un bout de VBA pour essayer de résoudre mon problème, mais je ne comprends pas a quel moment ça foire.
je croyait avoir a peu prés compris la gestion des nombres négatifs en binaire, mais apparemment y'a un moment ou j'ai raté une étape.

Code : Tout sélectionner

Function converti(fort As Byte, faible As integer)
    If fort < 128 Then
        converti = fort * 256 + faible
      Else
        converti = ((Not fort) * 256) + (Not faible)
        converti = (Not converti)
    End If
End Function

Re: [HS] [Excel] [VBA]

Posté : 06 janv. 2019, 22:04
par itasoft
slts,
un exemple parmi d'autres


Dim SOURCE As Byte
Dim RESULT As Integer
'Exemple
SOURCE = 255

If (SOURCE And &H80) > 0 Then
RESULT = 0 - (&H80 - CInt(SOURCE And &H7F))
Else: RESULT = CInt(SOURCE)
End If


MsgBox (RESULT)

Re: [HS] [Excel] [VBA]

Posté : 06 janv. 2019, 23:01
par MiGaNuTs
En fait je cherchait pas le bug au bon endroit, pourtant il est énorme et dès la première ligne !
J'ai déclaré "faible" en int et non en byte, c'est ça qui mets le bronx.

Je me suis pris la tête pendant 2h pour une connerie qui était sous mes yeux, juste parce que je cherchait ailleurs.

Re: [HS] [Excel] [VBA]

Posté : 06 janv. 2019, 23:30
par itasoft
slts,
mais au départ ta source celle qui contient une valeur de 0 à 255 c'est un Byte ou un Integer ??
si c'est un Byte au départ, ya pas besoin d"extraire les poids forts/faibles
exemple:

Function converti(Source As Byte) as Integer
If Source >= 128 Then
converti = 0 - ((Not (SOURCE)) + 1)
Else: converti = Source
End If
End Function

Re: [HS] [Excel] [VBA]

Posté : 07 janv. 2019, 22:23
par MiGaNuTs
MES sources, c'est 2 bytes, pas un seul. (enfin 2 "any" <256)

Le truc relou c'est qu’apparemment excel utilise des int en 32 bits quand c'est pour faire sa cuisine dans des cellules, mais des int de 16 bits en VBA.
Et le plus chiant de tout c'est qu'il n'a pas l'air d'aimer les unsigned.

Re: [HS] [Excel] [VBA]

Posté : 07 janv. 2019, 23:04
par itasoft
slts,
ok, j"avais compris que tu avais un seul Byte de 0 à 255 et que on voulais qu'il se comporte comme un Integer qui évolue entre
-128 à +127

Re: [HS] [Excel] [VBA]

Posté : 08 janv. 2019, 17:09
par philou77
Salut !

Ceci devrait aller comme tu veux :
2 Bytes de source, un integer signé en sortie

If PFort < 128 Then ' Calcul sur le mot naturellement positif
Mot = (PFort * 256) + PFaible
Else ' Cacul sur l'inverse du mot et passage en négatif !
Mot = (((Not (PFort)) * 256) + (Not (PFaible))) * -1
End If