Tutorial ini akan menunjukkan cara mengonversi string hex ke int dengan Python. Ini akan mencakup format hex yang berbeda seperti ditandatangani, kecil, dan big-endian, 0x beranotasi heksadesimal, dan string hex default
Gunakan int()_ untuk Mengonversi Hex menjadi Int dengan Python
Cara paling umum dan efektif untuk mengonversi hex menjadi bilangan bulat dengan Python adalah dengan menggunakan fungsi pengecoran tipe int()
Fungsi ini menerima dua argumen. satu argumen wajib, yang merupakan nilai yang akan dikonversi, dan argumen opsional kedua, yang merupakan basis format angka dengan default sebagai hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 0
Format angka lainnya adalah hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 1 untuk biner, hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 2 untuk oktal, dan hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 3 untuk heksadesimal. Jika Anda meletakkan hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) _4 sebagai argumen untuk nilai dasar, itu akan menghasilkan format angka dari awalan nilai. Jika tidak ada awalan, maka secara otomatis akan mengenalinya sebagai desimal, hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 5 untuk biner, hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 6 untuk oktal, dan 0x untuk heksadesimal
Mengonversi String Hex Tanpa Awalan menjadi Int dengan Python
Jika string heksadesimal tidak diawali, maka tentukan nilai dasar dari fungsi int() menjadi 16
Misalnya
hex_val = 'beef101' print(int(hex_val, 16))
Keluaran
Hasilnya adalah konversi desimal atau bilangan bulat dari nilai hex hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 9
Mengonversi String Hex Berawalan menjadi Int dengan Python
Jika string hex memiliki awalan 0x, maka ubah argumen nilai dasar menjadi hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 4 untuk mendeteksi awalan secara otomatis
Anda masih dapat meneruskan hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 3 sebagai basis, tetapi jika Anda berurusan dengan banyak nilai dengan format angka yang berbeda, meneruskan hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16)) 4 adalah pendekatan terbaik
hex_val = '0xdeadcab' print(int(hex_val, 0)) print(int(hex_val, 16))
Keluaran
Mengonversi String Hex Little dan Big Endian ke Int dengan Python
Pesanan byte little endian dan big-endia adalah dua jenis sistem pemesanan untuk heksadesimal. Urutan defaultnya adalah little-endian, yang menempatkan angka paling signifikan di bagian paling kanan dari urutan, sedangkan big-endian sebaliknya
Dengan mengingat hal itu, yang harus kita pertimbangkan adalah mengubah nilai heksadesimal big-endian menjadi bit-endian. Setelah itu, konversi biasa sekarang dapat dilakukan di atasnya
Untuk mengonversi string heksadesimal big-endian menjadi string little-endian, gunakan big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) 4 dan gunakan fungsi big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) 5 pada hasilnya. Setelah itu, ubah kembali nilai heksadesimal menjadi string dan ubah menjadi bilangan bulat
big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16))
Untuk meringkas blok kode ini
- Panggil big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) _4 untuk mengubah string hex big-endian menjadi nilai heksadesimal array byte
- Balikkan array byte untuk mengonversi big-endian menjadi format little-endian
- Ubah nilai array byte kembali menjadi format string hex di little-endian
- Ubah string menjadi bilangan bulat menggunakan int()
Keluaran
Byte array format: bytearray(b'\xbe\xef') Little endian hex: beef Hex to int: 48879
Mengonversi Hex menjadi Integer yang Ditandatangani dengan Python
Mengubah format angka apa pun menjadi bilangan bulat bertanda akan membutuhkan operasi yang disebut Pelengkap Dua, yang merupakan operasi matematika bitwise untuk menghitung angka bertanda
Jadi sebelum kita dapat mengonversi heksadesimal menjadi bilangan bulat bertanda, kita perlu mendefinisikan fungsi yang akan menjalankan operasi Pelengkap Dua
def twosComplement_hex(hexval): bits = 16 # Number of bits in a hexadecimal number format val = int(hexval, bits) if val & (1 << (bits-1)): val -= 1 << bits return val
Bit paling kiri dalam nilai biner disebut bit bertanda, yang menentukan apakah bilangan bulatnya positif atau negatif. Fungsi ini akan mencadangkan bit itu sebagai bit yang ditandatangani dan menggeser bit lainnya untuk mengkompensasi dengan menggunakan operator pergeseran kiri bitwise big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) 8
Sekarang, beralih ke konversi sebenarnya dari nilai hex menjadi int yang ditandatangani
hex_val1 = 'ff' hex_val2 = 'ffff' hex_val3 = 'aaff' def twosComplement_hex(hexval): bits = 16 val = int(hexval, bits) if val & (1 << (bits-1)): val -= 1 << bits return val print(twosComplement_hex(hex_val1)) print(twosComplement_hex(hex_val2)) print(twosComplement_hex(hex_val3))
Keluaran
Sekarang, kami telah mencapai konversi string hex menjadi integer yang ditandatangani
Singkatnya, kami telah membahas konversi berbagai jenis format heksadesimal menjadi bilangan bulat bertanda dan tidak bertanda. Gunakan int() dengan argumen nilai dan basis untuk mengonversi heks menjadi bilangan bulat tak bertanda
Jika heksadesimal dalam format big-endian, ubahlah menjadi format little-endian terlebih dahulu menggunakan big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) 4 dan big_endian = 'efbe' def to_little(val): little_hex = bytearray.fromhex(val) little_hex.reverse() print("Byte array format:", little_hex) str_little = ''.join(format(x, '02x') for x in little_hex) return str_little little_endian = to_little(big_endian) print("Little endian hex:", little_endian) print("Hex to int:", int(little_endian, 16)) 5
Terakhir, jika Anda perlu mengonversi string hex menjadi bilangan bulat bertanda, lakukan operasi Komplemen Dua pada nilai heksadesimal di atasnya untuk mendapatkan nilai bilangan bulat bertanda