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
781 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!

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