Jak przekonwertować łańcuch na jego wartość bajtu? Mam ciąg "hello"
i chcę go zmienić na coś takiego jak "/x68..."
.Jak przekonwertować ciąg na tablice bajtowe?
Odpowiedz
Python 2.6 i nowsze wersje mają typ bytearray, który może być tym, czego szukasz. W przeciwieństwie do łańcuchów jest to zmienna, tzn. Można zmieniać poszczególne bajty "na miejscu", zamiast tworzyć cały nowy ciąg. Ma ładną mieszankę funkcji list i ciągów. I to również wyjaśnia, że pracujesz z arbitralnymi bajtami, a nie z tekstem.
quote "Chcę zmienić wszystko, co jest w pliku (String) w tablicy bajtów." ... odpowiedź @ kindall robi dokładnie to. +1 dla bytearray() – easysid
'list (bytearray (" hello "))' –
Zrobiłem kilka testów prędkości i 'list (bytearray (" hello "))' jest szybsze niż 'map (ord," hello ")' –
Jeśli chcesz uzyskać szesnastkową reprezentację ciąg można zrobić:
"hello".encode("hex") # '68656c6c6f'
i spełniać swoją reprezentację odniesienia (nie brać tego na poważnie, że to jest nie to, czego naprawdę chcą) :
"".join(["/x%02x" % ord(c) for c in "hello"]) # '/x68/x65/x6c/x6c/x6f'
Może chcesz to (Python 2):
Przez ciąg Unicode to wróci Unicode punkty kodowe:
>>> map(ord,u'Hello, 马克')
[72, 101, 108, 108, 111, 44, 32, 39532, 20811]
Ale kodują go uzyskać wartości bajtów do kodowania:
>>> map(ord,u'Hello, 马克'.encode('chinese'))
[72, 101, 108, 108, 111, 44, 32, 194, 237, 191, 203]
>>> map(ord,u'Hello, 马克'.encode('utf8'))
[72, 101, 108, 108, 111, 44, 32, 233, 169, 172, 229, 133, 139]
Należy zauważyć, że nie zwróci to wartości "bajtu" dla znaków spoza ASCII, ponieważ ord zwróci coś większego niż 0xFF. – user100464
@ user100464, nie dla łańcucha bajtowego, który powyższy jest dla Pythona 2 ('map' nie zwraca listy w Pythonie 3). Bajt nie może być powyżej 0xFF. Również nie-ASCII jest powyżej 0x7F, a nie 0xFF :) –
- 1. Jak przekonwertować float na 4-bajtowe znaki w C?
- 2. Ciąg na bajt/binarne tablice w PHP
- 3. jak przekonwertować ciąg c na ciąg d?
- 4. Jak przekonwertować uint32 na ciąg?
- 5. Jak przekonwertować znak na ciąg?
- 6. Jak przekonwertować JSON na ciąg?
- 7. Jak przekonwertować ciąg na CharSequence?
- 8. Jak przekonwertować ciąg na BigInteger?
- 9. Jak przekonwertować ciąg [] na ArrayList?
- 10. Jak przekonwertować ciąg na długi
- 11. Jak przekonwertować BeautifulSoup.ResultSet na ciąg
- 12. Jak przekonwertować Writer na ciąg
- 13. jak przekonwertować NSinteger na ciąg
- 14. Jak przekonwertować ciąg na android.net.Uri
- 15. Jak przekonwertować ciąg na NSData
- 16. Jak przekonwertować ciąg na bitset?
- 17. Konwersja char [] tablice na ciąg
- 18. Jak przekonwertować ciąg na szesnastkowy i szesnastkowy na ciąg?
- 19. Podział ARGB na wartości bajtowe
- 20. przekonwertować ciąg szesnastkowy (hex) na ciąg binarny
- 21. Szablon Django przekonwertować na ciąg
- 22. Jak przekonwertować ciąg znaków na znak Unicode?
- 23. Jak przekonwertować stringstream na ciąg w C++?
- 24. Jak przekonwertować wartość UUID na ciąg
- 25. Jak skutecznie przekonwertować tablicę bajtową na ciąg
- 26. Jak przekonwertować ciąg na float lub int?
- 27. Jak przekonwertować ciąg JSON na NSArray?
- 28. Jak przekonwertować Akka ByteString na ciąg?
- 29. Jak przekonwertować ciąg znaków na obiekt BinaryExpression?
- 30. Jak przekonwertować boolean na zlokalizowany ciąg znaków
Zdajesz sobie sprawę, że to wszystko to tylko bity i bajty u najniższy poziom i że ciągi '" hello "' i '" \ x68 \ x65 \ x6C \ x6C \ x6F "' są identyczne (chyba że uciekniesz przed ukośnikami odwrotnymi zamiast używać ich dla ucieczek heksadecymalnych)? – delnan
Tak, wiem. Chcę tylko eksportować do pewnej tablicy na tak niskim poziomie. – Martin
To nie ma sensu, co właściwie chcesz robić? (Jest to tylko pewien pośredni krok, który uważasz za konieczny). – plundra