Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa \"bait(n)\" Tidak Mewakili Bentuk Perduaan bagi \"n\"?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-20 14:54:02616semak imbas

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>

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>

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>

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