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 : 36
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 1 074
    Points : 1 710
    Points
    1 710

    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 << .

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

    Informations forums :
    Inscription : juillet 2002
    Messages : 277
    Points : 380
    Points
    380

    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
    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 : 4
    Points
    4

    Par défaut On peut faire plus simple

    exemple :
    dat = 0x45
    datL= dat & 0x0F
    datH= ~datL & dat

  8. #8
    Membre expert Avatar de BufferBob
    Profil pro
    Inscrit en
    novembre 2010
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 395
    Points : 3 611
    Points
    3 611

    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