Python Null Polstret Binære Alternativer


7.1. struct 8212 Tolk byte som pakket binær data Denne modulen utfører konverteringer mellom Python-verdier og C-strukturer representert som Python bytes-objekter. Dette kan brukes til å håndtere binære data lagret i filer eller fra nettverksforbindelser, blant annet kilder. Det bruker Format Strings som kompakte beskrivelser av layouten av C-strukturer og den påtatte konverteringen fra Python-verdier. Som standard inneholder resultatet av å pakke en gitt C-struktur putebyte for å opprettholde riktig justering for de involverte C-typer på tilsvarende måte, justering tas i betraktning ved utpakking. Denne oppførselen er valgt slik at byte av en pakket struktur samsvarer nøyaktig med oppsettet til minne for den tilsvarende C struct. For å håndtere plattformuavhengige dataformater eller utelate implisitte padbytes, bruk standardstørrelse og justering i stedet for innfødt størrelse og justering: se Byte Order, Size og Alignment for detaljer. Flere strukturfunksjoner (og metoder for struktur) ta et buffer argument. Dette refererer til objekter som implementerer bufferprotokollen og gir enten en lesbar eller lesbar skrivbar buffer. De vanligste typene som brukes til dette formålet er byte og bytearray. men mange andre typer som kan betraktes som en rekke byte, implementerer bufferprotokollen, slik at de kan leses uten ytterligere kopiering fra et bytesobjekt. 7.1.1. Funksjoner og unntak Modulen definerer følgende unntak og funksjoner: unntak struktur. feil Unntak hevet ved ulike anledninger argument er en streng som beskriver hva som er galt. Returner et bytesobjekt som inneholder verdiene v1. v2. pakket i henhold til formatstrengen fmt. Argumentene må samsvare med verdiene som kreves av formatet nøyaktig. Pakke verdiene v1. v2. i henhold til formatstrenget fmt og skriv de pakkede byte inn i den skrivbare bufferbufferen som starter ved posisjon offset. Merk at forskyvning er et nødvendig argument. Pakke ut fra bufferbufferen (antagelig pakket av pakke (fmt.)) I henhold til formatstrengen fmt. Resultatet er en tuple, selv om den inneholder nøyaktig ett element. Buffer8217s størrelse i byte må samsvare med størrelsen som kreves av formatet, som reflektert av calcsize (). Pakke ut fra buffer som starter ved posisjon offset. i henhold til formatstrengen fmt. Resultatet er en tuple, selv om den inneholder nøyaktig ett element. Bufferen8217s størrelse i byte, minus forskyvning. må være minst den størrelsen som kreves av formatet, som reflektert av calcsize (). Pakter iterativt fra bufferbufferen i henhold til formatstrengen fmt. Denne funksjonen returnerer en iterator som leser like store biter fra bufferen til alt innholdet er blitt brukt. Buffer8217s størrelse i byte må være et flertall av størrelsen som kreves av formatet, som reflektert av calcsize (). Hver iterasjon gir en tuple som spesifisert av formatstrengen. Nytt i versjon 3.4. Returner størrelsen på strukturen (og dermed av bytesobjektet produsert av pakken (fmt.)) Som svarer til formatstrengen fmt. 7.1.2. Format Strings Format strenger er mekanismen som brukes til å spesifisere den forventede utformingen når du pakker og pakker ut data. De er bygget opp fra Format Karakterer. som spesifiserer typen data som pakkespakket. I tillegg er det spesialtegn for styring av byteordre, størrelse og justering. 7.1.2.1. Byte-ordre, størrelse og justering Som standard er C-typer representert i maskinformatet for maskin8217s byte og byte-rekkefølge, og riktig justert ved å hoppe over padbytes om nødvendig (i henhold til reglene som brukes av C-kompilatoren). Alternativt kan den første tegnet av formatstrengen brukes til å indikere byte rekkefølgen, størrelsen og justeringen av den pakkede data, i henhold til følgende tabell: Hvis det første tegnet ikke er en av disse, antas 64. Native byte-ordre er big-endian eller little endian, avhengig av vertssystemet. For eksempel er Intel x86 og AMD64 (x86-64) lite endian Motorola 68000 og PowerPC G5 er big-endian ARM og Intel Itanium-funksjonen switchable endianness (bi-endian). Bruk sys. byteorder for å sjekke endianen av systemet ditt. Innfødt størrelse og justering bestemmes ved hjelp av C compiler8217s størrelsen på uttrykk. Dette er alltid kombinert med innfødt byte rekkefølge. Standardstørrelsen er bare avhengig av formatkarakteren, se tabellen i delen Formatkarakterer. Legg merke til forskjellen mellom 64 og. begge bruker native byte rekkefølge, men størrelsen og justeringen av sistnevnte er standardisert. Skjemaet er tilgjengelig for de fattige sjeler som hevder at de kan huske om nettverksbyteordre er big-endian eller little endian. Det er ingen måte å indikere ikke-innfødt byte-ordre (bytebytting) bruke riktig valg av lt eller gt. Padding legges bare automatisk mellom suksessive strukturmedlemmer. Ingen polstring legges til i begynnelsen eller slutten av den kodede strukturen. Ingen polstring legges til ved bruk av ikke-innfødt størrelse og justering, f. eks. med 8216lt8217, 8216gt8217, 82168217 og 82168217. For å justere slutten av en struktur til justeringskravet for en bestemt type, avslutt formatet med koden for den typen med en gjentattelling på null. Se eksempler. 7.1.2.2. Format Karakterer Format-tegn har følgende betydning Konvertering mellom C og Python-verdier bør være åpenbar gitt sine typer. Kolonnen 8216Standard size8217 refererer til størrelsen på den pakkede verdien i byte når du bruker standardstørrelse som er når formatstrengen starter med en av lt. gt. eller. Når du bruker innfødt størrelse, er størrelsen på den pakkede verdien plattformavhengig. Endret i versjon 3.6: Lagt til støtte for e-formatet. Omregningskoden tilsvarer Bool-typen som er definert av C99. Hvis denne typen ikke er tilgjengelig, simuleres den ved hjelp av en karbon. I standardmodus er den alltid representert av en byte. Kombinasjonene q og Q er kun tilgjengelige i innfødt modus hvis plattform C-kompilatoren støtter C lang lenge. eller, på Windows, int64. De er alltid tilgjengelige i standardmodus. Når du prøver å pakke et ikke-heltall ved hjelp av noen av integer-konverteringskodene, hvis ikke-heltallet har en indeks () - metode, kalles denne metoden for å konvertere argumentet til et heltall før pakking. Endret i versjon 3.2: Bruk av indeks () - metoden for ikke-heltall er ny i 3.2. Konverteringskodene n og N er bare tilgjengelige for den opprinnelige størrelsen (valgt som standard eller med 64 byte ordre karakter). For standardstørrelsen kan du bruke hvilket av de andre heltallformatene som passer til søknaden din. For f. d og e-konverteringskoder, bruker den pakkede representasjonen binary32-, binary64- eller binary16-formatet for IEEE 754 (for henholdsvis f. d eller e), uavhengig av flytpunktformatet som brukes av plattformen. P-formatkarakteren er bare tilgjengelig for den ordinære byte-bestillingen (valgt som standard eller med 64 byte-ordre). Byte-ordrekarakteren velger å bruke liten eller stor endian bestilling basert på vertssystemet. Strukturen modulerer ikke dette som innfødt bestilling, så P-formatet er ikke tilgjengelig. IEEE 754 binary16 8220half precision8221-typen ble introdusert i 2008-revisjonen av IEEE 754-standarden. Den har en tegnbit, en 5-bit eksponent og 11-bits presisjon (med 10 bits eksplisitt lagret), og kan representere tall mellom ca. 6.1e-05 og 6.5e04 med full presisjon. Denne typen støttes ikke mye av C-kompilatorer: På en typisk maskin kan en usignert kort brukes til lagring, men ikke for matteoperasjoner. Se Wikipedia-siden på halv-presisjon flytpunktformatet for mer informasjon. Et formatkarakter kan foregå med en integrert repetisjonstelling. For eksempel betyr formatstrengen 4h nøyaktig det samme som hhhh. Whitespace-tegn mellom formater ignoreres, og formatet må ikke inneholde hvite mellomrom. For s-formatkarakteren blir tellingen tolket som lengden på byte, ikke en gjentellingstelling som for de andre formattegnene for eksempel, 10s betyr en enkelt 10-byte streng, mens 10c betyr 10 tegn. Hvis en telle ikke er oppgitt, er den som standard 1. For pakking er strengen avkortet eller polstret med nullbyte som passer for å gjøre det passende. For utpakking har det resulterende bytesobjektet alltid nøyaktig spesifisert antall byte. Som et spesielt tilfelle betyr 0s en enkelt, tom streng (mens 0c betyr 0 tegn). Når du pakker en verdi x ved hjelp av et av integerformatene (f. B. h. H. I. I. l. L. q. Q), hvis x er utenfor det gyldige området for det formatet, blir struct. error hevet. Endret i versjon 3.1: I 3.0 innpakket noen av integerformatene utenfor rekkeviddeverdier og hevet DeprecationWarning i stedet for struct. error. P-formatkarakteren koder for en 8220Pascal-streng8221, som betyr en kort variabellengdesnor lagret i et fast antall byte. gitt av tellingen. Den første lagrede byten er lengden på strengen, eller 255, avhengig av hvilken som helst. Bytes av strengen følger. Hvis strengen gikk inn for å pakke () er for lang (lengre enn tallet minus 1), lagres bare de ledende telling-1 byte av strengen. Hvis strengen er kortere enn telle-1. den er polstret med nullbyte, slik at det er nøyaktig teller byte i alle brukes. Legg merke til at du skal pakke ut (). p-formatkarakteren bruker tellebyte, men at strengen som returneres, aldri inneholder mer enn 255 byte. For formatkarakteren er returverdien enten True eller False. Ved pakking brukes sannhetsverdien til argumentobjektet. Enten 0 eller 1 i den native eller standard bool-representasjonen vil bli pakket, og en hvilken som helst ikke-null-verdi vil være ekte når du pakker ut. 7.1.2.3. Eksempler Alle eksempler antar en ordinær byte rekkefølge, størrelse og justering med en big endian machine. Mailing List Archive 15 Juni 2011, 5:29 AM Post 1 av 11 (5509 visninger) Hei der, Ive leter etter 2 dager for en måte å konvertere heltall til binært nummer 0-polstret, ingenting. Jeg trenger å få tall konvertert med et definert antall biter. For eksempel på 8 biter 2 00000010 skrev jeg følgende: ltcodegt usrbinenv python def int2binPadded (tall, størrelse): Formålet med denne funksjonen er å konvertere heltall til binært nummer 0-polstret. hvis type (tall) int eller tall lt 0: øke ValueError, skal være et positivt heltall hvis type (størrelse) int: oppring ValueError, skal være et heltall hvis tall gt (2size) -1: øke ValueError, tallet er for stort konvertere int til bin b str (bin (tall)) 2: hvis len (b) størrelse: b (size-len (b)) 0b hvis navn hoved: import sys utskrift int2binPadded (int (sys. argv1), int argv2)) ltcodegt Dette tilfredsstiller mine behov. Men hva synes du om det. Takk for dine kommentarer, Re: integer til binær 0-polstret Svar på 15 Juni 2011, 5:33 AM Innlegg 2 av 11 (5430 visninger) Er 15.06.2011 14:29, Schrieb Olivier LEMAIRE: Hi hei, Jeg har vært på utkikk etter 2 dager for en måte å konvertere heltall gt til binært nummer 0-polstret, ingenting. Jeg må få numre omregnet gt med et definert antall biter. For eksempel på 8 bits 2 00000010 Re: integer til binær 0-polstret Svar på 15 Juni 2011, 5:48 AM Innlegg 3 av 11 (5435 visninger) På ons, 15. juni 2011 kl. 22:29, Olivier LEMAIRE ltm. olivier. lemairegmailgt skrev: gt b str (bin (tall)) 2: gt hvis len (b) størrelse: gt b (size-len (b)) 0b Du trenger ikke str returnerer et nummer. Heres en relativt triviell forenkling - selv om det gjør koden mer kryptisk: Etter at jeg skrev dette opp så jeg Daniels innlegg, noe som er ganske bedre. Gå med den for null-fylling gruver mer generelt, men du kan pute med andre tokens. Re: integer til binær 0-polstret Svar på 15 Juni 2011, 5:54 Innlegg 4 av 11 (5428 visninger) Olivier LEMAIRE skrev: gt Jeg har vært på utkikk etter 2 dager for en måte å konvertere heltall til binært tall gt 0 - padded, ingenting. Jeg trenger å få tall konvertert med et definert antall gt biter. For eksempel på 8 biter 2 00000010 skrev jeg følgende: gt b str (bin (tall)) 2: Resultatet av bin () er allerede en streng, ikke nødvendig å søke str (). gt hvis len (b) størrelse: gt b (size-len (b)) 0b b. zfill (størrelse) kan gjøre det. gt, men hva synes du om det Her er en annen måte (krever Python 2.7): gtgtgt b. format (42, 10) 0000101010 Re: integer til binær 0-polstret Svar på 15 Juni 2011, 6:07 Innlegg 5 av 11 (5431 visninger) Takk til alle dere. så endelig kan jeg bare skrive. ltcodegt usrbinenv python def int2binPadded (tall, størrelse): Formålet med denne funksjonen er å konvertere heltall til binært nummer 0-polstret. hvis type (tall) int eller tall lt 0: øke ValueError, skal være et positivt heltall hvis type (størrelse) int: oppring ValueError, skal være et heltall hvis tall gt (2size) -1: øke ValueError, tallet er for stort konvertere int to bin Re: integer til binær 0-polstret Svar på 15 Juni 2011, 6:13 AM Innlegg 6 av 11 (5440 visninger) 06152011 07:33, Daniel Rentz skrev: Am Am ​​15.06.2011 14:29 , schrieb Olivier LEMAIRE: gtgt Hei der, Ive leter etter 2 dager for en måte å konvertere heltall gtgt til binært nummer 0-polstret, ingenting. Jeg må få numre omregnet gtgt med et definert antall biter. For eksempel på 8 biter 2 00000010 gt gt bin (2) 2:.zfill (8) Bare for å ha i tråden (selv om OP ser ut til å bruke 2.6 eller nyere), ser funksjonen bin () til å ha blitt lagt til 2.6 som er noe jeg ønsket hadde vært tilbake-ported til 2.4 og 2.5 som jeg har vært tilstrekkelig fast koding mot eldre versjoner av Python å ha (re) skrevet en bin () funksjon flere ganger. Hei der, Ive leter etter 2 dager for en måte å konvertere heltall til binært nummer 0-polstret, ingenting. Jeg trenger å få tall konvertert med et definert antall biter. For eksempel på 8 biter 2 00000010 skrev jeg følgende: ltcodegt usrbinenv python def int2binPadded (tall, størrelse): Formålet med denne funksjonen er å konvertere heltall til binært nummer 0-polstret. hvis type (tall) int eller tall lt 0: øke ValueError, skal være et positivt heltall hvis type (størrelse) int: oppring ValueError, skal være et heltall hvis tall gt (2size) -1: øke ValueError, tallet er for stort konvertere int til bin b str (bin (tall)) 2: hvis len (b) størrelse: b (size-len (b)) 0b hvis navn hoved: import sys utskrift int2binPadded (int (sys. argv1), int argv2)) ltcodegt Dette tilfredsstiller mine behov. Men hva synes du om det. Takk for dine kommentarer, Re: integer til binær 0-polstret Svar på 15 Juni 2011, 5:33 AM Innlegg 2 av 11 (5431 visninger) Er 15.06.2011 14:29, schrieb Olivier LEMAIRE: Hi hei, Jeg har vært på utkikk etter 2 dager for en måte å konvertere heltall gt til binært nummer 0-polstret, ingenting. Jeg må få numre omregnet gt med et definert antall biter. For eksempel på 8 biter 2 00000010 Re: heltall til binær 0-polstret Svar på 15 Juni 2011, 5:48 AM Innlegg 3 av 11 (5436 visninger) På ons, 15. juni 2011 kl. 22:29, Olivier LEMAIRE ltm. olivier. lemairegmailgt skrev: gt b str (bin (tall)) 2: gt hvis len (b) størrelse: gt b (size-len (b)) 0b Du trenger ikke str returnerer et nummer. Heres en relativt triviell forenkling - selv om det gjør koden mer kryptisk: Etter at jeg skrev dette opp så jeg Daniels innlegg, noe som er ganske bedre. Gå med den for null-fylling gruver mer generelt, men du kan pute med andre tokens. Re: integer til binær 0-polstret Svar på 15 Juni 2011, 5:54 Innlegg 4 av 11 (5429 visninger) Olivier LEMAIRE skrev: gt Jeg har vært på utkikk etter 2 dager for en måte å konvertere heltall til binært tall gt 0 - padded, ingenting. Jeg trenger å få tall konvertert med et definert antall gt biter. For eksempel på 8 biter 2 00000010 skrev jeg følgende: gt b str (bin (tall)) 2: Resultatet av bin () er allerede en streng, ikke nødvendig å søke str (). gt hvis len (b) størrelse: gt b (size-len (b)) 0b b. zfill (størrelse) kan gjøre det. gt, men hva synes du om det Her er en annen måte (krever Python 2.7): gtgtgt b. format (42, 10) 0000101010 Re: integer til binær 0-polstret Svar på 15 Juni 2011, 6:07 Innlegg 5 av 11 (5432 visninger) Takk til alle dere. så endelig kan jeg bare skrive. ltcodegt usrbinenv python def int2binPadded (tall, størrelse): Formålet med denne funksjonen er å konvertere heltall til binært nummer 0-polstret. hvis type (tall) int eller tall lt 0: øke ValueError, skal være et positivt heltall hvis type (størrelse) int: oppring ValueError, skal være et heltall hvis tall gt (2size) -1: øke ValueError, tallet er for stort konvertere int to bin Re: integer til binær 0-polstret Svar på 15 Juni 2011, 6:13 AM Innlegg 6 av 11 (5441 visninger) 06152011 07:33, Daniel Rentz skrev: Am Am ​​15.06.2011 14:29 , schrieb Olivier LEMAIRE: gtgt Hei der, Ive leter etter 2 dager for en måte å konvertere heltall gtgt til binært nummer 0-polstret, ingenting. Jeg må få numre omregnet gtgt med et definert antall biter. For eksempel på 8 biter 2 00000010 gt gt bin (2) 2:.zfill (8) Bare for å ha i tråden (selv om OP ser ut til å bruke 2.6 eller nyere), ser funksjonen bin () til å ha blitt lagt til 2.6 som er noe jeg ønsket hadde vært tilbake-ported til 2.4 og 2.5 som jeg har vært tilstrekkelig fast koding mot eldre versjoner av Python å ha (re) skrevet en bin () funksjon flere ganger. Ah vel.

Comments

Popular Posts