je dois manipuler des octets.
La liste d'opération à faire est la suivante:
-prendre un octet
-le XOR-er avec une valeur
-soustraire AA à ce résultat
-fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple:
Valeur initiale: 0x6c
XOR: 0x41
Résultat: 0x2d
Et : 0x2d
moins : 0xaa
= FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas
Bonjour,
Le 11/12/2013 22:00, Kevin Denis a écrit :
Bonjour,
je dois manipuler des octets. La liste d'opération à faire est la suivante: -prendre un octet -le XOR-er avec une valeur -soustraire AA à ce résultat -fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple: Valeur initiale: 0x6c XOR: 0x41 Résultat: 0x2d
Et : 0x2d moins : 0xaa = FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Faire un AND 0xFF i = 0x6C r = ((i ^ 0x41) - 0xAA) & 0xFF
Merci
Bonjour,
Le 11/12/2013 22:00, Kevin Denis a écrit :
Bonjour,
je dois manipuler des octets.
La liste d'opération à faire est la suivante:
-prendre un octet
-le XOR-er avec une valeur
-soustraire AA à ce résultat
-fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple:
Valeur initiale: 0x6c
XOR: 0x41
Résultat: 0x2d
Et : 0x2d
moins : 0xaa
= FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Faire un AND 0xFF
i = 0x6C
r = ((i ^ 0x41) - 0xAA) & 0xFF
je dois manipuler des octets. La liste d'opération à faire est la suivante: -prendre un octet -le XOR-er avec une valeur -soustraire AA à ce résultat -fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple: Valeur initiale: 0x6c XOR: 0x41 Résultat: 0x2d
Et : 0x2d moins : 0xaa = FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Faire un AND 0xFF i = 0x6C r = ((i ^ 0x41) - 0xAA) & 0xFF
Merci
Pierre Maurette
Kevin Denis :
Bonjour,
je dois manipuler des octets. La liste d'opération à faire est la suivante: -prendre un octet -le XOR-er avec une valeur -soustraire AA à ce résultat -fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple: Valeur initiale: 0x6c XOR: 0x41 Résultat: 0x2d
Et : 0x2d moins : 0xaa = FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Vous définissez vos contraintes pas un exemple, on est obligé de faire des hypothèses. Disons donc que vos octets sont une classe de 256 objets int, positifs et strictement entre 0 et 255. L'addition et la soustraction se font classiquement, on additionne N en avançant N fois, on soustrait N en reculant N fois, arrivé à 255 en avançant on passe à 0, arrivé à 0 en reculant on passe à 255. 3 moins 5 font 254, par exemple. 255 plus 12 font 11. Je pense d'ailleurs que vous n'avez pas de problème uniquement pour la soustraction.
Sans se compliquer à surcharger les opérateurs, vous pouvez utiliser simplement: def myadd(a, b): return (a + b) & 255 def mysub(a, b): return myadd(a, -b)
Si vous bossez plus longtemps sur le sujet, vous pouvez vous faire une petite classe, en améliorant:
Attention, à l'utilisation, ça semble trop bien fonctionner, mais le choix de l'opérateur n'est pas nécessairement évident. Bout de test:
a = u8(3105) #256 * 12 + 33 print a, u'(doit être 33)' print b = a + 240 print 'b', b print 'a + b', a + b print 'a - b', a - b print '-a + b', -a + b print 'a * -1 + b', a * -1 + b print 'b - a', b - a print 'u8(b) - a', u8(b) - a print 'u8(-255)', u8(-255) print 'u8(3 - 5)', u8(3 - 5) print b = u8(a + 240) print 'b', b print 'a + b', a + b print 'a - b', a - b print '-a + b', -a + b print 'a * -1 + b', a * -1 + b print 'b - a', b - a print 'u8(b) - a', u8(b) - a print 'u8(-255)', u8(-255) print 'u8(3 - 5)', u8(3 - 5)
-- Pierre Maurette
Kevin Denis :
Bonjour,
je dois manipuler des octets.
La liste d'opération à faire est la suivante:
-prendre un octet
-le XOR-er avec une valeur
-soustraire AA à ce résultat
-fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple:
Valeur initiale: 0x6c
XOR: 0x41
Résultat: 0x2d
Et : 0x2d
moins : 0xaa
= FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Vous définissez vos contraintes pas un exemple, on est obligé de faire
des hypothèses. Disons donc que vos octets sont une classe de 256
objets int, positifs et strictement entre 0 et 255. L'addition et la
soustraction se font classiquement, on additionne N en avançant N fois,
on soustrait N en reculant N fois, arrivé à 255 en avançant on passe à
0, arrivé à 0 en reculant on passe à 255. 3 moins 5 font 254, par
exemple. 255 plus 12 font 11. Je pense d'ailleurs que vous n'avez pas
de problème uniquement pour la soustraction.
Sans se compliquer à surcharger les opérateurs, vous pouvez utiliser
simplement:
def myadd(a, b): return (a + b) & 255
def mysub(a, b): return myadd(a, -b)
Si vous bossez plus longtemps sur le sujet, vous pouvez vous faire une
petite classe, en améliorant:
Attention, à l'utilisation, ça semble trop bien fonctionner, mais le
choix de l'opérateur n'est pas nécessairement évident. Bout de test:
a = u8(3105) #256 * 12 + 33
print a, u'(doit être 33)'
print
b = a + 240
print 'b', b
print 'a + b', a + b
print 'a - b', a - b
print '-a + b', -a + b
print 'a * -1 + b', a * -1 + b
print 'b - a', b - a
print 'u8(b) - a', u8(b) - a
print 'u8(-255)', u8(-255)
print 'u8(3 - 5)', u8(3 - 5)
print
b = u8(a + 240)
print 'b', b
print 'a + b', a + b
print 'a - b', a - b
print '-a + b', -a + b
print 'a * -1 + b', a * -1 + b
print 'b - a', b - a
print 'u8(b) - a', u8(b) - a
print 'u8(-255)', u8(-255)
print 'u8(3 - 5)', u8(3 - 5)
je dois manipuler des octets. La liste d'opération à faire est la suivante: -prendre un octet -le XOR-er avec une valeur -soustraire AA à ce résultat -fournir le résultat final
La soustraction me pose un problème dans certain cas.
Si je prends pour exemple: Valeur initiale: 0x6c XOR: 0x41 Résultat: 0x2d
Et : 0x2d moins : 0xaa = FFFFFF83
La valeur qui m'intéresse dans le cas présent, c'est 0x83.
Comment faire ce calcul en python?
Vous définissez vos contraintes pas un exemple, on est obligé de faire des hypothèses. Disons donc que vos octets sont une classe de 256 objets int, positifs et strictement entre 0 et 255. L'addition et la soustraction se font classiquement, on additionne N en avançant N fois, on soustrait N en reculant N fois, arrivé à 255 en avançant on passe à 0, arrivé à 0 en reculant on passe à 255. 3 moins 5 font 254, par exemple. 255 plus 12 font 11. Je pense d'ailleurs que vous n'avez pas de problème uniquement pour la soustraction.
Sans se compliquer à surcharger les opérateurs, vous pouvez utiliser simplement: def myadd(a, b): return (a + b) & 255 def mysub(a, b): return myadd(a, -b)
Si vous bossez plus longtemps sur le sujet, vous pouvez vous faire une petite classe, en améliorant:
Attention, à l'utilisation, ça semble trop bien fonctionner, mais le choix de l'opérateur n'est pas nécessairement évident. Bout de test:
a = u8(3105) #256 * 12 + 33 print a, u'(doit être 33)' print b = a + 240 print 'b', b print 'a + b', a + b print 'a - b', a - b print '-a + b', -a + b print 'a * -1 + b', a * -1 + b print 'b - a', b - a print 'u8(b) - a', u8(b) - a print 'u8(-255)', u8(-255) print 'u8(3 - 5)', u8(3 - 5) print b = u8(a + 240) print 'b', b print 'a + b', a + b print 'a - b', a - b print '-a + b', -a + b print 'a * -1 + b', a * -1 + b print 'b - a', b - a print 'u8(b) - a', u8(b) - a print 'u8(-255)', u8(-255) print 'u8(3 - 5)', u8(3 - 5)