logo

Python | Convertiți șirul în octeți

Conversiile inter sunt, ca de obicei, destul de populare, dar conversia între un șir în octeți este mai frecventă în zilele noastre, datorită faptului că, pentru gestionarea fișierelor sau învățare automată (Fișier Pickle), solicităm în mod extensiv ca șirurile să fie convertite în octeți. Să discutăm anumite moduri în care acest lucru poate fi realizat.

Metoda #1: Utilizarea octeților (str, enc) Șirul poate fi convertit în octeți folosind funcția generică octeți. Această funcție indică în mod intern către Biblioteca CPython, care apelează implicit funcția de codificare pentru conversia șirului la codificarea specificată.



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)))>



>

>

Ieșire:

The original string : GFG is best The byte converted string is : b'GFG is best', type :>

Metoda #2: Folosind codificare(enc) Cea mai recomandată metodă de a efectua această sarcină specială, folosind funcția de codificare pentru a face conversia, deoarece reduce o legătură suplimentară la o anumită bibliotecă, această funcție o numește direct.

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)))>

>

>

Ieșire:

The original string : GFG is best The byte converted string is : b'GFG is best', type :>

Metoda #2: Folosind memoryview()

În acest exemplu, apelăm metoda encode() pe variabila my_string pentru a o converti în octeți folosind codificarea UTF-8. Apoi trecem obiectul bytes rezultat la funcția memoryview(), care returnează un obiect de vizualizare a memoriei care oferă o vizualizare a octeților de bază.

În cele din urmă, apelăm metoda tobytes() pe obiectul de vizualizare memorie pentru a crea un nou obiect octeți care conține aceleași date. Acest obiect bytes este stocat în variabila my_bytes și imprimat pe consolă.

NOTĂ: funcția memoryview() este utilă pentru situațiile în care trebuie să accesați octeții de bază ai unui obiect fără a-i copia. Cu toate acestea, s-ar putea să nu fie cea mai eficientă abordare pentru conversia simplă șir în octeți, deoarece implică o suprasarcină suplimentară.

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)>

>

>

Ieșire

b'Hello, world!'>

complexitatea timpului: O(n),

complexitate spațială: O(n)

material unghiular

Metoda #3: Folosind metoda binascii.unhexlify():

Algoritm:

1.Importă modulul binascii
2.Inițializați un șir care conține reprezentarea hexazecimală a octeților
3.Utilizați metoda unhexlify() a modulului binascii pentru a converti șirul hexazecimal în octeți
4.Tipărește octeții convertiți și tipul acestora.

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>

>

>

Ieșire

The original string : 4766472069732062657374 The byte converted string is : b'GfG is best', type :>

Complexitatea timpului:

Metoda binascii.unhexlify() are o complexitate de timp de O(n), unde n este lungimea șirului de intrare.
Toate celelalte operații din acest cod au o complexitate de timp de O(1).
Prin urmare, complexitatea de timp generală a acestui cod este O(n).

Complexitatea spațiului:

Complexitatea spațială a acestui cod este O(1), deoarece utilizează doar o cantitate constantă de spațiu suplimentar, indiferent de dimensiunea intrării.

Metoda 5: folosind metoda struct.pack().

Abordare pas cu pas

Importați modulul struct în codul dvs.
Inițializați un șir numit „test_string” cu valoarea GFG este cea mai bună.
Tipăriți șirul original folosind instrucțiunea print.
Utilizați metoda bytes() pentru a converti șirul în octeți. Transmiteți codificarea „test_string” și „utf-8” ca parametri metodei.
Utilizați metoda struct.pack() pentru a converti octeții în date binare. Treceți șirul de format „10s” și octeții ca parametri metodei. Șirul de format „10s” indică faptul că datele de intrare trebuie tratate ca un șir de lungime 10.
Stocați rezultatul într-o variabilă „res”.
Tipăriți șirul de octeți convertit împreună cu tipul său folosind instrucțiunea 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)))>

>

>

Ieșire

The original string : GFG is best The byte converted string is : b'GFG is bes', type :>

Complexitatea timpului: complexitatea temporală a metodelor bytes() și struct.pack() este O(n) unde n este lungimea șirului de intrare.

Spațiu auxiliar: complexitatea spațiului a metodelor bytes() și struct.pack() este O(n) unde n este lungimea șirului de intrare.