Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa \'bait(n)\' Tidak Mewakili Bentuk Perduaan bagi \'n\'?

Mengapa \'bait(n)\' Tidak Mewakili Bentuk Perduaan bagi \'n\'?

Linda Hamilton
Lepaskan: 2024-10-20 14:54:02
asal
715 orang telah melayarinya

Why Doesn't

Mengapa "bait(n)" Tidak Mewakili Perduaan?

Fungsi "bait(n)" dalam Python 3 menjana rentetan bait panjang 'n ' diisi dengan bait nol, dan bukannya menukar integer 'n' kepada perwakilan binarinya. Tingkah laku yang tidak dijangka ini berpunca daripada perubahan yang diperkenalkan dalam Python 3.2.

Kaedah 'to_bytes'

Untuk menukar integer kepada perwakilan binarinya, anda boleh menggunakan kaedah 'to_bytes' yang diperkenalkan dalam Python 3.2. Contoh berikut menunjukkan penggunaannya:

<code class="python">>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'</code>
Salin selepas log masuk

Sebagai alternatif, anda boleh melaksanakan fungsi anda sendiri untuk mengendalikan penukaran integer-ke-bait:

<code class="python">def int_to_bytes(x: int) -> bytes:
    return x.to_bytes((x.bit_length() + 7) // 8, 'big')

def int_from_bytes(xbytes: bytes) -> int:
    return int.from_bytes(xbytes, 'big')</code>
Salin selepas log masuk

Integer Bertanda

Kaedah 'to_bytes' hanya menyokong penukaran integer yang tidak ditandatangani. Untuk integer yang ditandatangani, pengiraan panjang bit adalah lebih kompleks:

<code class="python">def int_to_bytes(number: int) -> bytes:
    return number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True)

def int_from_bytes(binary_data: bytes) -> Optional[int]:
    return int.from_bytes(binary_data, byteorder='big', signed=True)</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa \'bait(n)\' Tidak Mewakili Bentuk Perduaan bagi \'n\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan