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]:
2 là hoạt động lớn.-11010010000110000011000 11111111100101101111001111101000
3 dài.-11010010000110000011000 11111111100101101111001111101000
4 là không dấu dài.-11010010000110000011000 11111111100101101111001111101000
- Trong kiến trúc
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.-11010010000110000011000 11111111100101101111001111101000
[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]
6Như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