IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment avoir l'octet de poids fort et faible d'un nombre


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut Comment avoir l'octet de poids fort et faible d'un nombre
    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 ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 69
    Points
    69
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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)
    j'espère t'avoir aidé,
    shepounet

  3. #3
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Je cherche comment trouver l'octet de poids fort et faibe d'un nombre
    Tu veux separer un nombre de 2 octets en 2 nombres de un octet?
    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 << .
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  4. #4
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par azerty25 Voir le message
    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 ?
    La réponse est simple et compliquée. Simple parce qu'elle tient en trois lignes de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      assert(testvaleur in range(0, 65535))  
      print 'poids faible: ', testvaleur % 2
      print 'poids fort: ', (testvaleur > 32767) * 1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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()
    Bon courage

    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
    Pour les octets, dans la même veine, vous pouvez essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      assert(testvaleur in range(0, 65535))  
      print 'octet poids faible: ', testvaleur % 256
      print 'octet poids fort: ', testvaleur // 256
    Pierre

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut
    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 Tu pourrais expliquer ?

    Sinon, j'ai fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> Nb=23028
    >>> low=Nb>>8
    >>> low
    89
    >>> hi=~(low << 8) & Nb
    >>> hi
    244
    Pour Shepounet : attention, ne fais pas trop de Python sinon tu va commencer à voir des pythons dans tes toilettes toi aussi

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 69
    Points
    69
    Par défaut
    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
    ===============================================

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2012
    Messages : 1
    Points : 0
    Points
    0
    Par défaut On peut faire plus simple
    exemple :
    dat = 0x45
    datL= dat & 0x0F
    datH= ~datL & dat

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    on peut faire même encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> n = 0x1234
    >>> low = n & 0xff
    >>> high = n >> 8
    >>> hex(high), hex(low)
    ('0x12', '0x34')
    et si on veut s'assurer que les nombres sont bornés sur 2 octets il suffira de faire un n &= 0xffff préalable

    Edit: oh mais il y a un joli déterrage de topic dans la foulée, j'avais pas fait attention

Discussions similaires

  1. [XL-2003] Concaténer un poids fort et faible pour former un Long
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/07/2011, 12h53
  2. Réponses: 3
    Dernier message: 12/01/2011, 11h51
  3. Réponses: 2
    Dernier message: 01/03/2010, 12h58
  4. Comment avoir des marges dans un TRichEdit ?
    Par nomdutilisateur dans le forum Composants VCL
    Réponses: 5
    Dernier message: 25/06/2004, 09h57
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo