Konwersje wewnętrzne są jak zwykle dość popularne, ale konwersja między ciągiem znaków na bajty jest obecnie bardziej powszechna ze względu na fakt, że do obsługi plików lub uczenia maszynowego (plik Pickle) w dużym stopniu wymagamy konwersji ciągów na bajty. Omówmy pewne sposoby, w jakie można to zrobić.
Metoda nr 1: Używanie bajtów (str, enc) Ciąg można przekonwertować na bajty za pomocą ogólnej funkcji bytes. Ta funkcja wewnętrznie wskazuje na bibliotekę CPython, która niejawnie wywołuje funkcję encode w celu konwersji ciągu na określone kodowanie.
Python3
# Python code to demonstrate> # convert string to byte> # Using bytes(str, enc)> # initializing string> test_string>=> 'GFG>is> best'> # printing original string> print>('The original string : '>+> str>(test_string))> # Using bytes(str, enc)> # convert string to byte> res>=> bytes(test_string,>'utf-8'>)> # print result> print>('The byte converted string>is> : '>+> str>(res)>+> ',>type> : '>+> str>(>type>(res)))> |
>
>Wyjście :
The original string : GFG is best The byte converted string is : b'GFG is best', type :>
Metoda nr 2: Używanie encode(enc) Najbardziej zalecaną metodą wykonania tego konkretnego zadania jest użycie funkcji encode do wykonania konwersji, ponieważ zmniejsza to jedno dodatkowe połączenie z konkretną biblioteką, ta funkcja bezpośrednio ją wywołuje.
Python3
# Python code to demonstrate> # convert string to byte> # Using encode(enc)> # initializing string> test_string>=> 'GFG>is> best'> # printing original string> print>('The original string : '>+> str>(test_string))> # Using encode(enc)> # convert string to byte> res>=> test_string.encode(>'utf-8'>)> # print result> print>('The byte converted string>is> : '>+> str>(res)>+> ',>type> : '>+> str>(>type>(res)))> |
Zamień ciąg JavaScript
>
>Wyjście :
The original string : GFG is best The byte converted string is : b'GFG is best', type :>
Metoda nr 2: Używanie widoku pamięci()
W tym przykładzie wywołujemy metodę encode() na zmiennej my_string, aby przekonwertować ją na bajty przy użyciu kodowania UTF-8. Następnie przekazujemy powstały obiekt bytes do funkcji memoryview(), która zwraca obiekt widoku pamięci, który zapewnia widok bazowych bajtów.
Na koniec wywołujemy metodę tobytes() w obiekcie widoku pamięci, aby utworzyć nowy obiekt bajtów zawierający te same dane. Ten obiekt bytes jest przechowywany w zmiennej my_bytes i drukowany na konsoli.
UWAGA: funkcja memoryview() jest przydatna w sytuacjach, gdy trzeba uzyskać dostęp do podstawowych bajtów obiektu bez ich kopiowania. Jednak może to nie być najskuteczniejsze podejście do prostej konwersji ciągu znaków na bajty, ponieważ wiąże się z dodatkowym obciążeniem.
Python3
my_string>=> 'Hello, world!'> #Define a string called my_string with the value 'Hello, world!'.> my_bytes>=> memoryview(my_string.encode(>'utf-8'>)).tobytes()> #Encode the string as bytes using the UTF-8 encoding by calling the encode() method on my_string and passing 'utf-8' as the argument. This will return a bytes object containing the encoded bytes.> #Convert the memoryview object of the bytes object to bytes using the tobytes() method. This creates a new bytes object that is a copy of the original bytes object.> #Print the resulting bytes object using the print() function.#> print>(my_bytes)> |
>
>Wyjście
b'Hello, world!'>
złożoność czasowa: O(n),
złożoność przestrzenna: O(n)
Metoda nr 3: Użycie metody binascii.unhexlify():
Algorytm:
1. Zaimportuj moduł binascii
2. Zainicjuj ciąg znaków zawierający szesnastkową reprezentację bajtów
3. Użyj metody unhexlify() modułu binascii, aby przekonwertować ciąg szesnastkowy na bajty
4.Wydrukuj przekonwertowane bajty i ich typ.
Python3
import> binascii> # initializing string> test_string>=> '4766472069732062657374'> # printing original string> print>(>'The original string : '> +> str>(test_string))> # Using binascii.unhexlify()> # convert string to byte> res>=> binascii.unhexlify(test_string)> # print result> print>(>'The byte converted string is : '> +> str>(res)>+> ', type : '> +> str>(>type>(res)))> #This code is contributed by Jyothi pinjala> |
>
>Wyjście
The original string : 4766472069732062657374 The byte converted string is : b'GfG is best', type :>
Złożoność czasowa:
Metoda binascii.unhexlify() ma złożoność czasową O(n), gdzie n jest długością ciągu wejściowego.
Wszystkie inne operacje w tym kodzie mają złożoność czasową O(1).
Dlatego całkowita złożoność czasowa tego kodu wynosi O (n).
Złożoność przestrzeni:
Złożoność przestrzenna tego kodu wynosi O(1), ponieważ wykorzystuje on tylko stałą ilość dodatkowej przestrzeni, niezależnie od rozmiaru wejściowego.
Metoda 5: użycie metody struct.pack().
Podejście krok po kroku
Zaimportuj moduł struct do swojego kodu.
Zainicjuj ciąg o nazwie „string_testowy” z wartością GFG, która jest najlepsza.
Wydrukuj oryginalny ciąg znaków, używając instrukcji print.
Aby przekonwertować ciąg na bajty, użyj metody bytes(). Przekaż kodowanie „test_string” i „utf-8” jako parametry do metody.
Użyj metody struct.pack(), aby przekonwertować bajty na dane binarne. Przekaż ciąg formatujący „10” i bajty jako parametry do metody. Ciąg formatujący „10” wskazuje, że dane wejściowe należy traktować jako ciąg o długości 10.
Zapisz wynik w zmiennej „res”.
Wydrukuj przekonwertowany ciąg bajtów wraz z jego typem, używając instrukcji print.
Python3
import> struct> # initializing string> test_string>=> 'GFG is best'> # printing original string> print>(>'The original string : '> +> str>(test_string))> # Using struct.pack()> # convert string to byte> res>=> struct.pack(>'10s'>, bytes(test_string,>'utf-8'>))> # print result> print>(>'The byte converted string is : '> +> str>(res)>+> ', type : '> +> str>(>type>(res)))> |
>
>Wyjście
The original string : GFG is best The byte converted string is : b'GFG is bes', type :>
Złożoność czasowa: Złożoność czasowa metod bytes() i struct.pack() wynosi O(n), gdzie n jest długością ciągu wejściowego.
Przestrzeń pomocnicza: Złożoność przestrzenna metod bytes() i struct.pack() wynosi O(n), gdzie n jest długością ciągu wejściowego.