Saturday 23 December 2017

Python zero padded binary options


7.1. struct 8212 Interpretowanie bajtów jako spakowanych danych binarnych Ten moduł wykonuje konwersje między wartościami Pythona i strukturami C reprezentowanymi jako obiekty Pythona bytes. Może to być wykorzystywane między innymi do obsługi danych binarnych przechowywanych w plikach lub z połączeń sieciowych. Używa ciągów formatów jako zwięzłych opisów układu struktur C i zamierzonej konwersji wartości Pythona. Domyślnie wynik upakowania danej struktury C zawiera bajty padu w celu zachowania odpowiedniego wyrównania dla zaangażowanych typów C podobnie, wyrównanie jest brane pod uwagę podczas rozpakowywania. To zachowanie jest wybierane tak, aby bajty upakowanej struktury odpowiadały dokładnie układowi w pamięci odpowiedniej struktury C. Aby obsługiwać niezależne od platformy formaty danych lub pomijać niejawne bajty padów, użyj standardowego rozmiaru i wyrównania zamiast natywnego rozmiaru i wyrównania: patrz Kolejność bajtów, Rozmiar i Wyrównanie. Kilka funkcji strukturalnych (i metod Struct) przyjmuje argument bufora. Dotyczy to obiektów implementujących protokół buforowy i zapewniających bufor czytelny lub zapisywalny do odczytu. Najczęściej stosowanymi typami używanymi do tego celu są bajty i bytearray. ale wiele innych typów, które mogą być postrzegane jako tablica bajtów, implementuje protokół buforowy, dzięki czemu można je odczytać bez dodatkowego kopiowania z obiektu bajtowego. 7.1.1. Funkcje i wyjątki Moduł definiuje następujący wyjątek i funkcje: wyjątek struct. błąd Wyjątek zgłaszany przy różnych okazjach argument jest ciągiem opisującym, co jest nie tak. Zwróć obiekt bajtów zawierający wartości v1. v2. spakowane zgodnie z łańcuchem formatu fmt. Argumenty muszą dokładnie odpowiadać wartościom wymaganym przez format. Spakuj wartości v1. v2. zgodnie z łańcuchem formatowania fmt i zapisz spakowane bajty do zapisywalnego bufora bufora rozpoczynającego się od przesunięcia pozycji. Zauważ, że offset jest wymaganym argumentem. Rozpakuj z bufora buforowego (przypuszczalnie spakowany przez pakiet (fmt.)) Zgodnie z łańcuchem formatowania fmt. Rezultatem jest krotka, nawet jeśli zawiera dokładnie jeden przedmiot. Wielkość bufora8217 w bajtach musi być zgodna z rozmiarem wymaganym przez format, co jest odzwierciedlone przez calcsize (). Rozpakuj z bufora zaczynając od przesunięcia pozycji. zgodnie z łańcuchem formatu fmt. Rezultatem jest krotka, nawet jeśli zawiera dokładnie jeden przedmiot. Rozmiar buffer8217s w bajtach, minus offset. musi mieć co najmniej rozmiar wymagany przez format, co jest odzwierciedlone przez calcsize (). Iteracyjnie rozpakowuj z bufora buforowego zgodnie z łańcuchem formatowania fmt. Ta funkcja zwraca iterator, który odczytuje porcje o jednakowej wielkości z bufora, aż cała jego zawartość zostanie zużyta. Rozmiar bufora8217s w bajtach musi być wielokrotnością rozmiaru wymaganego przez format, co jest odzwierciedlone przez calcsize (). Każda iteracja daje krotkę określoną przez ciąg formatu. Nowości w wersji 3.4. Zwróć rozmiar struktury (a tym samym obiektu bajtów tworzonego przez pakiet (fmt.)) Odpowiadającego łańcuchowi formatowania fmt. 7.1.2. Ciągi formatów Łańcuchy formatu są mechanizmem używanym do określenia oczekiwanego układu podczas pakowania i rozpakowywania danych. Są zbudowane z postaci w formacie. które określają rodzaj pakowanych danych bez opakowania. Ponadto istnieją specjalne znaki do kontrolowania kolejności, wielkości i wyrównania bajtów. 7.1.2.1. Kolejność, rozmiar i wyrównanie bajtów Domyślnie typy C są reprezentowane w formacie macierzystym komputera i kolejności bajtów i odpowiednio wyrównane poprzez pomijanie bajtów padów, jeśli jest to konieczne (zgodnie z regułami stosowanymi przez kompilator języka C). Alternatywnie, pierwszy znak ciągu formatu może być użyty do wskazania kolejności bajtów, wielkości i wyrównania spakowanych danych, zgodnie z poniższą tabelą: Jeśli pierwszy znak nie jest jednym z nich, zakłada się 64. Kolejność natywnych bajtów to big-endian lub little-endian, w zależności od systemu hosta. Na przykład, Intel x86 i AMD64 (x86-64) to mało-endianowe Motorola 68000, a PowerPC G5 to high-endian ARM i Intel Itanium z możliwością przełączania endianness (bi-endian). Użyj sys. byteorder, aby sprawdzić endianness systemu. Rodzimy rozmiar i wyrównanie są określane przy użyciu wyrażenia sizeof C088217s. Jest to zawsze połączone z natywną kolejnością bajtów. Rozmiar standardowy zależy tylko od znaku formatu, patrz tabela w sekcji Formatuj postacie. Zauważ różnicę między 64 a. oba używają natywnego porządku bajtowego, ale rozmiar i wyrównanie drugiego jest znormalizowane. Formularz jest dostępny dla tych biednych dusz, które twierdzą, że nie pamiętają, czy kolejność bajtów sieciowych jest duża - endianowa, czy little-endianowa. Nie ma sposobu, aby wskazać nierodzimą kolejność bajtów (wymuszenie zamiany bajtów) użyj odpowiedniego wyboru parametru lt lub gt. Wypełnienie jest dodawane automatycznie między kolejnymi członami struktury. Brak dopełnienia na początku lub na końcu kodowanej struktury. Podczas korzystania z rozmiaru nienatywnego i wyrównania nie dodaje się dopełnienia, np. z 8216lt8217, 8216gt8217, 82168217 i 82168217. Aby wyrównać koniec struktury do wymagań wyrównania określonego typu, zakończ format kodem tego typu z liczbą powtórzeń równą zero. Zobacz Przykłady. 7.1.2.2. Formatowanie znaków Formatowanie znaków ma następujące znaczenie: konwersja między wartościami C i Python powinna być oczywista, biorąc pod uwagę ich typy. Kolumna 8216Standard size8217 odnosi się do wielkości spakowanej wartości w bajtach, gdy używa się standardowego rozmiaru, który jest, gdy ciąg formatu zaczyna się od jednego z lt. gt. lub. W przypadku korzystania z formatu natywnego rozmiar spakowanej wartości zależy od platformy. Zmieniono w wersji 3.6: Dodano obsługę formatu e. Kod konwersji odpowiada typowi Bool zdefiniowanemu przez C99. Jeśli ten typ nie jest dostępny, jest symulowany za pomocą znaku. W trybie standardowym zawsze jest reprezentowany przez jeden bajt. Kody konwersji q i Q są dostępne w trybie macierzystym tylko wtedy, gdy kompilator C platformy obsługuje C długo. lub, w systemie Windows, int64. Są one zawsze dostępne w standardowych trybach. Podczas próby spakowania liczby niecałkowitej za pomocą dowolnego z kodów konwersji całkowitych, jeśli liczba niecałkowita ma metodę index (), wówczas ta metoda jest wywoływana w celu przekonwertowania argumentu na liczbę całkowitą przed zapakowaniem. Zmieniono w wersji 3.2: Użycie metody index () dla wartości nie będących liczbami całkowitymi jest nowe w wersji 3.2. Kody konwersji n i N są dostępne tylko dla formatu natywnego (wybranego jako domyślny lub z 64-bajtowym znakiem kolejności). W przypadku standardowego rozmiaru możesz użyć tego, który z formatów całkowitych pasuje do twojej aplikacji. Dla f. kody konwersji d i e, spakowana reprezentacja używa formatu binary32, binary64 lub binary16 IEEE 754 (odpowiednio dla f. d lub e), niezależnie od formatu zmiennoprzecinkowego używanego przez platformę. Znak formatu P jest dostępny tylko dla macierzystego uporządkowania bajtów (wybranego jako domyślny lub z 64-bajtowym znakiem kolejności). Znak porządku bajtów decyduje się na małe lub duże endianowanie w oparciu o system hosta. Moduł struct nie interpretuje tego jako rodzime uporządkowanie, więc format P nie jest dostępny. Typ IEEE 754 binary16 8220half precision8221 został wprowadzony w wersji 2008 standardu IEEE 754. Ma bit znaku, 5-bitowy wykładnik i 11-bitową precyzję (z 10 bitami jawnie zapisanymi) i może reprezentować liczby od około 6.1e-05 do 6.5e04 z pełną precyzją. Ten typ nie jest szeroko obsługiwany przez kompilatory języka C: na typowej maszynie niepodpisany skrót może być używany do przechowywania, ale nie do operacji matematycznych. Więcej informacji można znaleźć na stronie Wikipedia dotyczącej formatu zmiennoprzecinkowego z dokładnością do połowy. Znak formatu może być poprzedzony całkowitą liczbą powtórzeń. Na przykład ciąg formatu 4h oznacza dokładnie to samo, co hhhh. Białe znaki między formatami są ignorowane i ich format nie może zawierać białych znaków. W przypadku formatu s liczba jest interpretowana jako długość bajtów, a nie liczba powtórzeń jak w przypadku innych znaków formatu, na przykład 10s oznacza pojedynczy 10-bajtowy łańcuch, a 10c oznacza 10 znaków. Jeśli liczba nie jest podana, przyjmuje wartość domyślną 1. W przypadku pakowania ciąg jest obcinany lub wypełniany bajtami zerowymi, stosownie do potrzeb, aby pasował. Do rozpakowania wynikowy obiekt bajtów ma zawsze dokładnie określoną liczbę bajtów. W specjalnym przypadku 0s oznacza pojedynczy, pusty ciąg (podczas gdy 0c oznacza 0 znaków). Podczas pakowania wartości x przy użyciu jednego z formatów całkowitych (b. B. h. H. i. I. l. L. q. Q), jeśli x jest poza prawidłowym zakresem dla tego formatu, wówczas struct. error zostaje podniesiony. Zmieniono w wersji 3.1: W wersji 3.0 niektóre z formatów całkowitych zawijały wartości spoza zakresu i zwiększały wartość DeprecationWarning zamiast struct. error. Znak formatu p koduje ciąg 8220Pascal 8221, oznaczający krótki ciąg o zmiennej długości przechowywany w ustalonej liczbie bajtów. podane przez hrabiego. Pierwszy przechowywany bajt to długość łańcucha lub 255, w zależności od tego, która wartość jest mniejsza. Następują bajty ciągu. Jeśli łańcuch przekazany do pakietu () jest zbyt długi (dłuższy niż liczba minus 1), przechowywane są tylko wiodące zliczenia -1 bajta ciągu. Jeśli ciąg jest krótszy niż liczba-1. jest wypełniony bajtami zerowymi, więc używane są dokładnie liczby bajtów we wszystkich. Zauważ, że do rozpakowania (). znak formatu p zużywa liczbę bajtów, ale zwracany ciąg nigdy nie może zawierać więcej niż 255 bajtów. W przypadku znaku formatu zwracana jest wartość True lub False. Podczas pakowania używana jest wartość true obiektu argumentu. Każda 0 lub 1 w natywnej lub standardowej reprezentacji bool zostanie spakowana, a każda niezerowa wartość będzie równa True podczas rozpakowywania. 7.1.2.3. Przykłady Wszystkie przykłady zakładają natywną kolejność bajtów, rozmiar i wyrównanie z maszyną typu big-endian. Lista list mailingowych Wysłane 15 czerwca 2017, 5:29 AM Post 1 z 11 (5509 odsłon) Witaj, szukałem 2 dni na sposób na konwersję liczby całkowitej na liczbę binarną 0, nic. Muszę uzyskać liczby konwertowane z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 napisałem: ltcodegt usrbinenv python def int2binPadded (liczba, rozmiar): Celem tej funkcji jest zamiana liczby całkowitej na liczbę binarną 0-padded. jeśli typ (liczba) int lub liczba lt 0: raise ValueError, powinna być dodatnią liczbą całkowitą, jeśli typ (size) int: raise ValueError, powinien być liczbą całkowitą, jeśli liczba gt (2 rozmiar) -1: wartość wyższa ValueError, liczba jest zbyt duża int do bin b str (bin (number)) 2: if len (b) size: b (size-len (b)) 0b jeśli name: import sys print int2binPadded (int (sys. argv1), int (sys. argv2)) ltcodegt To spełnia moje potrzeby. Chociaż, co o tym myślisz? Dziękuję za uwagi, Re: integer to binary 0-padded W odpowiedzi na 15 czerwca 2017, 5:33 AM Post 2 z 11 (5430 odsłon) Am 15.06.2017 14:29, schrieb Olivier LEMAIRE: gt Witaj, Szukałem 2 dni na sposób konwersji liczby całkowitej na liczbę binarną 0, nic. Muszę uzyskać liczby skonwertowane gt z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 Re: integer na binary 0-padded W odpowiedzi na 15 czerwca 2017, 5:48 AM Post 3 z 11 (5435 wyświetleń) W środę, 15 czerwca 2017 o 10:29, Olivier LEMAIRE ltm. olivier. lemairegmailgt napisał: gt b str (bin (number)) 2: gt if len (b) size: gt b (size-len (b)) 0b Nie potrzebujesz str () tam jako bin () już zwraca liczbę. Jest względnie trywialne uproszczenie - chociaż czyni kod bardziej tajemniczym: Po wpisaniu tego zobaczyłem post Danielsa, który jest raczej lepszy. Idź z tym do kopalni z zerowym napełnianiem bardziej ogólnych, ale możesz korzystać z innych tokenów. Re: integer to binary 0-padded W odpowiedzi na 15 czerwca 2017, 5:54 AM Post 4 z 11 (5428 wyświetleń) Olivier LEMAIRE napisał: gt Szukałem 2 dni na sposób konwersji liczby całkowitej na liczbę binarną gt 0 - padded, nic. Muszę uzyskać liczby konwertowane z określoną liczbą gt bitów. Na przykład na 8 bitach 2 00000010 napisałem: gt b str (bin (number)) 2: Wynik bin () jest już ciągiem, nie trzeba stosować str (). gt jeśli len (b) rozmiar: gt b (size-len (b)) 0b b. zfill (rozmiar) może to zrobić. gt. Co o tym myślisz? Oto inny sposób (wymaga Python 2.7): gtgtgt b. format (42, 10) 0000101010 Re: liczba całkowita do binarnej 0-padded W odpowiedzi na 15 czerwca 2017, 6:07 AM Post 5 z 11 (5431 wyświetleń) Dziękujemy wszyscy. więc w końcu mogę po prostu napisać. ltcodegt usrbinenv python def int2binPadded (liczba, rozmiar): Celem tej funkcji jest zamiana liczby całkowitej na liczbę binarną 0-padded. jeśli typ (liczba) int lub liczba lt 0: raise ValueError, powinna być dodatnią liczbą całkowitą, jeśli typ (size) int: raise ValueError, powinien być liczbą całkowitą, jeśli liczba gt (2 rozmiar) -1: wartość wyższa ValueError, liczba jest zbyt duża int do bin Re: integer to binary 0-padded W odpowiedzi na 15 czerwca 2017, 6:13 AM Post 6 z 11 (5440 odsłon) Na 06152017 07:33, Daniel Rentz napisał: gt Am 15.06.2017 14:29 , schrieb Olivier LEMAIRE: gtgt Witam, szukałem 2 dni na konwersję liczby całkowitej na gtgt na liczbę binarną 0, nic. Muszę uzyskać liczbę skonwertowaną gtgt z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 gt gt bin (2) 2:.zfill (8) Aby mieć w wątku (chociaż OP wydaje się używać 2.6 lub późniejszego), funkcja bin () wydaje się być dodana w 2.6, co jest czymś, czego pragnęłem, zostało przeniesione do wersji 2.4 i 2.5, ponieważ wystarczająco zablokowałem kodowanie przeciwko starszym wersjom Pythona, aby wielokrotnie (ponownie) zapisywać funkcję bin (). Ah well. Mailing List Archive Jun 15, 2017, 5:29 Post 1 z 11 (5510 odsłon) Cześć {Hi} tam, Ive szukałem 2 dni dla sposobu, aby przekonwertować liczbę całkowitą na liczbę binarną 0-wyściełane, nic. Muszę uzyskać liczby konwertowane z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 napisałem: ltcodegt usrbinenv python def int2binPadded (liczba, rozmiar): Celem tej funkcji jest zamiana liczby całkowitej na liczbę binarną 0-padded. jeśli typ (liczba) int lub liczba lt 0: raise ValueError, powinna być dodatnią liczbą całkowitą, jeśli typ (size) int: raise ValueError, powinien być liczbą całkowitą, jeśli liczba gt (2 rozmiar) -1: wartość wyższa ValueError, liczba jest zbyt duża int do bin b str (bin (number)) 2: if len (b) size: b (size-len (b)) 0b jeśli name: import sys print int2binPadded (int (sys. argv1), int (sys. argv2)) ltcodegt To spełnia moje potrzeby. Chociaż, co o tym myślisz? Dziękuję za uwagi, Re: integer to binary 0-padded W odpowiedzi na 15 czerwca 2017, 5:33 AM Post 2 z 11 (5431 odsłon) Am 15.06.2017 14:29, schrieb Olivier LEMAIRE: gt Witaj, Szukałem 2 dni na sposób konwersji liczby całkowitej na liczbę binarną 0, nic. Muszę uzyskać liczby skonwertowane gt z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 Re: liczba całkowita do binarnych 0-padded W odpowiedzi na 15 czerwca 2017, 5:48 AM Post 3 z 11 (5436 wyświetleń) W środę, 15 czerwca 2017 o 10:29, Olivier LEMAIRE ltm. olivier. lemairegmailgt napisał: gt b str (bin (number)) 2: gt if len (b) size: gt b (size-len (b)) 0b Nie potrzebujesz str () tam jako bin () już zwraca liczbę. Jest względnie trywialne uproszczenie - chociaż czyni kod bardziej tajemniczym: Po wpisaniu tego zobaczyłem post Danielsa, który jest raczej lepszy. Idź z tym do kopalni z zerowym napełnianiem bardziej ogólnych, ale możesz korzystać z innych tokenów. Re: integer to binary 0-padded W odpowiedzi na 15 czerwca 2017, 5:54 AM Post 4 z 11 (5429 odsłon) Olivier LEMAIRE napisał: gt Szukałem 2 dni na sposób konwersji liczby całkowitej na liczbę binarną gt 0 - padded, nic. Muszę uzyskać liczby konwertowane z określoną liczbą gt bitów. Na przykład na 8 bitach 2 00000010 napisałem: gt b str (bin (number)) 2: Wynik bin () jest już ciągiem, nie trzeba stosować str (). gt jeśli len (b) rozmiar: gt b (size-len (b)) 0b b. zfill (rozmiar) może to zrobić. gt. Co o tym myślisz? Oto inny sposób (wymaga Python 2.7): gtgtgt b. format (42, 10) 0000101010 Re: liczba całkowita do binarnej 0-padded W odpowiedzi na 15 czerwca 2017, 6:07 AM Post 5 z 11 (5432 odsłon) Dziękuję wszyscy. więc w końcu mogę po prostu napisać. ltcodegt usrbinenv python def int2binPadded (liczba, rozmiar): Celem tej funkcji jest zamiana liczby całkowitej na liczbę binarną 0-padded. jeśli typ (liczba) int lub liczba lt 0: raise ValueError, powinna być dodatnią liczbą całkowitą, jeśli typ (size) int: raise ValueError, powinien być liczbą całkowitą, jeśli liczba gt (2 rozmiar) -1: wartość wyższa ValueError, liczba jest zbyt duża int do bin Re: liczba całkowita do binarnej 0-padded W odpowiedzi na 15 czerwca 2017, 6:13 AM Post 6 z 11 (5441 wyświetleń) 06:01011 07:33, Daniel Rentz napisał: gt Am 15.06.2017 14:29 , schrieb Olivier LEMAIRE: gtgt Witam, szukałem 2 dni na konwersję liczby całkowitej na gtgt na liczbę binarną 0, nic. Muszę uzyskać liczbę skonwertowaną gtgt z określoną liczbą bitów. Na przykład na 8 bitach 2 00000010 gt gt bin (2) 2:.zfill (8) Aby mieć w wątku (chociaż OP wydaje się używać 2.6 lub późniejszego), funkcja bin () wydaje się być dodana w 2.6, co jest czymś, czego pragnęłem, zostało przeniesione do wersji 2.4 i 2.5, ponieważ wystarczająco zablokowałem kodowanie przeciwko starszym wersjom Pythona, aby wielokrotnie (ponownie) zapisywać funkcję bin (). Ach tak.

No comments:

Post a Comment