Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    3

    [Python] Byte che formano un int

    Salve a tutti,

    ho la necessità di ottenere i byte che formano un numero. Ad esempio, supponendo di avere

    i = 3000

    vorrei sapere se esiste un metodo o una tecnica che mi restituisca i singoli byte che formano il numero (0x0B e 0xB8). Come potete immaginare è un problema che nasce da architetture con differenti endianness.

    Grazie in anticipo

  2. #2
    Non mi è chiaro che intendi con "bytes che formano un intero".
    In che senso?
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    3
    Ad esempio, se vieni dal C sai che un int in certe architetture è formato da 4 byte, quindi in memoria avrà una rappresentazione del tipo (sto scrivendo numeri a caso)

    0x32 0x10 0xA3 0x18

    in Python mi sembra di capire che un intero non è formato da un numero fisso di byte. Dunque dato un numero a me servirebbe trovare il valore dei singoli byte (quindi i 4 di sopra). In realtà ho trovato un modo usando struct.pack e unpack, ma mi sembra un po' macchinoso, quindi magari mi sai suggerire qualcosa di meglio.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Python] Byte che formano un int

    Originariamente inviato da dnlplm
    Salve a tutti,

    ho la necessità di ottenere i byte che formano un numero. Ad esempio, supponendo di avere

    i = 3000

    vorrei sapere se esiste un metodo o una tecnica che mi restituisca i singoli byte che formano il numero (0x0B e 0xB8). Come potete immaginare è un problema che nasce da architetture con differenti endianness.
    Quello che dirò ora vale molto in generale e quindi non solo relativo a Python (che ammetto di conoscere davvero poco).
    Se vuoi ottenere i singoli byte la maniera più semplice è quella di fare giusto un paio di operazioni per estrarre i valori. Il byte meno significativo lo ottieni facendo una AND del valore con 255 (0xff), il byte appena più significativo lo ottieni facendo uno shift a destra di 8 bit e quindi una AND con 255. E così via ....

    Se ci siano funzioni già fatte in Python per fare ciò ... non lo so.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dnlplm
    in Python mi sembra di capire che un intero non è formato da un numero fisso di byte. Dunque dato un numero a me servirebbe trovare il valore dei singoli byte (quindi i 4 di sopra). In realtà ho trovato un modo usando struct.pack e unpack, ma mi sembra un po' macchinoso, quindi magari mi sai suggerire qualcosa di meglio.
    Forse è meglio se leggi <qui> sul manuale ufficiale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    3
    Originariamente inviato da andbin
    Forse è meglio se leggi <qui> sul manuale ufficiale.
    Non so perchè, ma non mi riesce ad aprire il link. In ogni caso il metodo che hai suggerito tu in C funzionerebbe benissimo, ma in Python mi sembra di capire che non si ha tutta questa flessibilità sino al singolo byte. In sostanza io vorrei arrivare ad avere degli interi che singolarmente rappresentano i byte in cui è composto il numero, quindi supponiamo sempre di avere 3000

    0x0B -> 11

    0xB8 -> 184

    ho risolto in questo modo:

    def getByteNumber(self, length):
    temp = struct.pack('!h', length)
    byteList = [firstLength, secondLength] = struct.unpack('BB', temp)
    return list(byteList)

    In questo modo ho una lista avente come elementi i byte che interessano a me. Ripeto che però mi sembra un po' macchinoso, ho cercato anche in diversi manuali, ma non ho trovato niente

  7. #7
    Non so perchè, ma non mi riesce ad aprire il link. In ogni caso il metodo che hai suggerito tu in C funzionerebbe benissimo, ma in Python mi sembra di capire che non si ha tutta questa flessibilità sino al singolo byte. In sostanza io vorrei arrivare ad avere degli interi che singolarmente rappresentano i byte in cui è composto il numero, quindi supponiamo sempre di avere 3000

    0x0B -> 11

    0xB8 -> 184
    Questa è una conversione da intero a stringa esadecimale.
    La puoi effettuare tramite il builtin hex():

    codice:
    >>> hex(184)
    '0xb8'
    >>> hex(11)
    '0xb'
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.