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ć?
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.
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()
.
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.
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.
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