Typecasting w Pythonie

Muszę przekonwertować ciągi znaków w Pythonie na inne typy, takie jak unsigned i signed 8, 16, 32 i 64 bitowe ints, podwaja, pływaki i ciągi.

Jak mogę to zrobić?

Author: ian5v, 2008-12-22

4 answers

Możesz przekonwertować łańcuch znaków na 32-bitową liczbę całkowitą podpisaną za pomocą funkcji int:

str = "1234"
i = int(str)  // i is a 32-bit integer

Jeśli łańcuch nie reprezentuje liczby całkowitej, otrzymasz wyjątek ValueError. Zauważ jednak, że jeśli łańcuch znaków reprezentuje liczbę całkowitą, ale ta liczba całkowita nie pasuje do 32-bitowej, podpisanej liczby całkowitej, wtedy otrzymasz obiekt typu long.

Możesz następnie przekonwertować go na inne szerokości i podpisać za pomocą prostej matematyki:

s8 = (i + 2**7) % 2**8 - 2**7      // convert to signed 8-bit
u8 = i % 2**8                      // convert to unsigned 8-bit
s16 = (i + 2**15) % 2**16 - 2**15  // convert to signed 16-bit
u16 = i % 2**16                    // convert to unsigned 16-bit
s32 = (i + 2**31) % 2**32 - 2**31  // convert to signed 32-bit
u32 = i % 2**32                    // convert to unsigned 32-bit
s64 = (i + 2**63) % 2**64 - 2**63  // convert to signed 64-bit
u64 = i % 2**64                    // convert to unsigned 64-bit

Możesz konwertować ciągi na pływający punkt z funkcją float:

f = float("3.14159")

Pływaki Pythona są tym, co inne języki nazywają double, tzn. są 64-bitowe. W Pythonie nie ma pływaków 32-bitowych.

 35
Author: Adam Rosenfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-14 05:21:17

Następujące typy -- w większości -- nie istnieją w Pythonie w ogóle. W Pythonie ciągi są konwertowane na ints, longs lub floats, ponieważ to wszystko.

Prosisz o konwersje, które nie są istotne dla Pythona w pierwszej kolejności. Oto lista typów, o które prosiłeś i ich odpowiedniki w Pythonie.

  • unsigned and signed int 8 bitów, int
  • unsigned and signed int 16 bitów, int
  • niepodpisane i podpisane int 32 bity, unsigned: long, signed int
  • Unsigned and signed int 64 bits, long

  • Double, float

  • float, float
  • string, od tego trzeba było zacząć

Nie wiem, jakie są poniższe, więc nie znam odpowiednika Pythona.

  • unsigned and signed 8 bit,
  • unsigned and signed 16 bit,
  • niepodpisane i podpisane 32 bit,
  • unsigned i signed 64 bit.

Masz już wszystkie nawrócenia, które mają znaczenie: int(), long() i float().

 3
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 12:15:11

Python ma tylko jeden typ int. Aby przekonwertować łańcuch znaków na int, Użyj int() w następujący sposób:

>>> str = '123'
>>> num = int(str)
>>> num
123

Edit: Aby przekonwertować na float, użyj float() W dokładnie taki sam sposób.

 2
Author: Jeremy Ruten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 04:42:51

Nie sądzę, aby można było na to dobrze odpowiedzieć bez dodatkowych informacji. Jak już inni mówili, w Pythonie istnieją tylko int I long dla liczb całkowitych-język ten nie jest zgodny z archetypami szerokości bitów i sygnalności języków programowania niższego poziomu.

Jeśli działasz całkowicie w Pythonie, to prawdopodobnie zadajesz złe pytanie. Prawdopodobnie jest lepszy sposób na zrobienie tego, czego potrzebujesz.

Jeśli współpracujesz np. z kodem C, lub nad sieć, to są sposoby na to, i wygląda na to, że odpowiedź na twój poprzedni wpis pokryła tę aleję dość ręcznie.

 0
Author: Jorenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 16:22:34