Bonjour
Je cherche comment trouver l'octet de poids fort et faibe d'un nombre, celui-ci est sur 2 octets.
J'ai beau chercher dans Google dans une éventuelle fonction, et je ne trouve pas, c'est peut être pas possible ?
Version imprimable
Bonjour
Je cherche comment trouver l'octet de poids fort et faibe d'un nombre, celui-ci est sur 2 octets.
J'ai beau chercher dans Google dans une éventuelle fonction, et je ne trouve pas, c'est peut être pas possible ?
Salut,
Ce code permettrait de trouver le bit le plus a gauche et le bit le plus à droite (il me semble que c'est bien ca que tu voulais)Code:
1
2
3
4
5
6
7 nombre=100001000000101010 manip_nombre=str(nombre) nombrebit=len(manip_nombre) bit_poid_faible=manip_nombre[nombrebit-1] bit_poid_fort=manip_nombre[0] print bit_poid_fort print bit_poid_faible
j'espère t'avoir aidé,
shepounet
Tu veux separer un nombre de 2 octets en 2 nombres de un octet?Citation:
Je cherche comment trouver l'octet de poids fort et faibe d'un nombre
ou tu veux recuperer le bit de poids fort et celui de poids faible?
Je te conseille d'utiliser le ET logique & et les operateurs de decalage >> et << .
La réponse est simple et compliquée. Simple parce qu'elle tient en trois lignes de code:
Compliquée, parce qu'on ne connait pas la représentation des nombres en Python, enfin, le programmeur d'application n'a pas à la connaître. Officiellement le nombre de bits est infini. D'où le assert(), par exemple. Le problème étant de bien définir ce qu'on veut faire. Il se trouve que j'étais vaguement sur le sujet, voici un bout de code qui peut vous intéresser, nettoyé de la question des négatifs et des séparateurs d'affichage:Code:
1
2
3 assert(testvaleur in range(0, 65535)) print 'poids faible: ', testvaleur % 2 print 'poids fort: ', (testvaleur > 32767) * 1
Bon courageCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #! /usr/bin/env python # -*- coding: iso-8859-1 -*- import sys HEX2BIN = { '0':'0000' ,'1':'0001' ,'2':'0010' ,'3':'0011' ,'4':'0100' ,'5':'0101' ,'6':'0110' ,'7':'0111' ,'8':'1000' ,'9':'1001' ,'A':'1010' ,'B':'1011' ,'C':'1100' ,'D':'1101' ,'E':'1110' ,'F':'1111' } def mydec2hex(value, hexdigits): return ('0'* (hexdigits - len(hex(value)[2:hexdigits + 2])) + hex(value)[2:hexdigits + 2]).upper() def mydec2bin(value, bits): return ''.join(HEX2BIN[c] for c in mydec2hex(value, bits/4)) def main(): testvaleur = 12455 print mydec2bin(testvaleur, 16) assert(testvaleur in range(0, 65535)) print 'poids faible: ', testvaleur % 2 print 'poids fort: ', (testvaleur > 32767) * 1 sys.exit(0) if __name__ == '__main__': main()
Ooooooops !!
J'avais lu 'bit' là où il fallait lire 'octet'. Un peu enduit d'erreur par la réponse de shepounet, celle de pacificator n'étant pas encore lisible :yaisse2:
Pour les octets, dans la même veine, vous pouvez essayer:
PierreCode:
1
2
3 assert(testvaleur in range(0, 65535)) print 'octet poids faible: ', testvaleur % 256 print 'octet poids fort: ', testvaleur // 256
Je vous remercie pour vos réponses. C'est en effet transformer un nombre de 2 octets en 2 nombres de 1 octet.
J'ai essayé ton code Pierre mais j'ai pas compris pourquoi il fonctionne :roll: Tu pourrais expliquer ?
Sinon, j'ai fais ça :
Pour Shepounet : attention, ne fais pas trop de Python sinon tu va commencer à voir des pythons dans tes toilettes toi aussi :lol:Code:
1
2
3
4
5
6
7 >>> Nb=23028 >>> low=Nb>>8 >>> low 89 >>> hi=~(low << 8) & Nb >>> hi 244
Mouarf un python dans mes toilettes :) ?
===============================================
anecdote : une américaine s'est retrouvé face à un python de 2m 20 de long en ouvrant la cuvette de ses toilettes ! Il a fallu enlevé 38 m de canalisation pour capturer la bêbête :mouarf:
===============================================
exemple :
dat = 0x45
datL= dat & 0x0F
datH= ~datL & dat
on peut faire même encore plus simple :
et si on veut s'assurer que les nombres sont bornés sur 2 octets il suffira de faire un n &= 0xffff préalableCode:
1
2
3
4
5 >>> n = 0x1234 >>> low = n & 0xff >>> high = n >> 8 >>> hex(high), hex(low) ('0x12', '0x34')
Edit: oh mais il y a un joli déterrage de topic dans la foulée, j'avais pas fait attention :oops: