Hướng dẫn python cast to unsigned int - python cast thành unsigned int

Bạn có thể sử dụng thư viện tích hợp

-11010010000110000011000

11111111100101101111001111101000
1 Python:

Encode:

import struct

i = -6884376
print['{0:b}'.format[i]]

packed = struct.pack['>l', i]  # Packing a long number.
unpacked = struct.unpack['>L', packed][0]  # Unpacking a packed long number to unsigned long
print[unpacked]
print['{0:b}'.format[unpacked]]

Out:

-11010010000110000011000

11111111100101101111001111101000

Decode:

dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]

Out:

-6884376

[NOTE]:NOTE]:

  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    2 là hoạt động lớn.
  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    3 dài.
  • -11010010000110000011000
    
    11111111100101101111001111101000
    
    4 là không dấu dài.
  • Trong kiến ​​trúc
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    5
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    6 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    7 lần lượt là 32bit, vì vậy bạn có thể sử dụng
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    8 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    9 thay vì
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    3 và
    -11010010000110000011000
    
    11111111100101101111001111101000
    
    4.

[UPDATE]

Theo nhận xét @hl037_, cách tiếp cận này hoạt động trên Int32 không Int64 hoặc Int128 khi tôi sử dụng thao tác dài vào

dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]
2. Tuy nhiên, trong trường hợp của Int64, mã bằng văn bản sẽ được thay đổi chỉ đơn giản là sử dụng toán hạng dài dài [
dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]
3] trong
-11010010000110000011000

11111111100101101111001111101000
1 như sau:

Encode:

i = 9223372036854775807  # the largest int64 number
packed = struct.pack['>q', i]  # Packing an int64 number
unpacked = struct.unpack['>Q', packed][0]  # Unpacking signed to unsigned
print[unpacked]
print['{0:b}'.format[unpacked]]

Out:

9223372036854775807
111111111111111111111111111111111111111111111111111111111111111

Tiếp theo, làm theo cùng một cách cho giai đoạn giải mã. Cũng như điều này, hãy ghi nhớ

dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]
5 và
dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]
6

Nhưng trong trường hợp của Int128, tình hình hơi khác nhau vì không có toán hạng 16 byte cho

dec_pack = struct.pack['>L', unpacked]  # Packing an unsigned long number.
dec_unpack = struct.unpack['>l', dec_pack][0]  # Unpacking a packed unsigned long number to long [revert action].
print[dec_unpack]
2. Do đó, bạn nên chia số của mình thành hai INT64.

Đây là cách nó nên được:

i = 10000000000000000000000000000000000000  # an int128 number
print[len['{0:b}'.format[i]]]
max_int64 = 0xFFFFFFFFFFFFFFFF
packed = struct.pack['>qq', [i >> 64] & max_int64, i & max_int64]
a, b = struct.unpack['>QQ', packed]
unpacked = [a 

Bài Viết Liên Quan

Chủ Đề