Bagaimana cara mengkonversi string hex ke int di Python?
Saya mungkin memilikinya sebagai " 0xffff
" atau hanya " ffff
".
Tanpa awalan 0x, Anda perlu menentukan basis secara eksplisit, jika tidak, tidak ada cara untuk mengatakan:
x = int("deadbeef", 16)
Dengan awalan 0x, Python dapat membedakan hex dan desimal secara otomatis.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Anda harus menentukan 0
sebagai basis untuk menjalankan perilaku menebak-awalan ini; menghilangkan parameter kedua berarti mengasumsikan basis-10.)
int("FFFF",16)
dikonversi menjadi -1.int(hexString, 16)
melakukan trik, dan bekerja dengan dan tanpa awalan 0x:sumber
Untuk string apa saja yang diberikan:
sumber
Untuk mengonversi string menjadi int, sampaikan string tersebut
int
bersama dengan basis tempat Anda konversi.Kedua string akan cukup untuk konversi dengan cara ini:
Membiarkan
int
menyimpulkanJika Anda melewatkan 0 sebagai basis,
int
akan menyimpulkan basis dari awalan dalam string.Tanpa awalan heksadesimal,
0x
,int
tidak memiliki informasi yang cukup yang dapat digunakan untuk menebak:literal:
Jika Anda mengetikkan kode sumber atau juru bahasa, Python akan melakukan konversi untuk Anda:
Ini tidak akan berhasil
ffff
karena Python akan berpikir Anda mencoba untuk menulis nama Python yang sah sebagai gantinya:Bilangan Python dimulai dengan karakter numerik, sedangkan nama Python tidak bisa dimulai dengan karakter numerik.
sumber
Menambahkan ke jawaban Dan di atas: jika Anda menyediakan fungsi int () dengan string hex, Anda harus menentukan basis sebagai 16 atau tidak akan berpikir Anda memberikannya nilai yang valid. Menentukan basis 16 tidak perlu untuk angka heks yang tidak terkandung dalam string.
sumber
Cara terburuk:
Tolong jangan lakukan ini!
Apakah menggunakan eval di Python merupakan praktik yang buruk?
sumber
eval
juga lambat bukan kepalang, di atas semua masalah lain dengan itu.int(s,16)
mengembalikan nilai yang tidak tepat, menyebabkan beberapa masalah utama dengan runtime saya (int(hex(value),16) == int(value) >>> False
). string yang dipasok keeval()
aman dan nilai yang dikembalikan tepat.Atau
ast.literal_eval
(ini aman, tidak sepertieval
):Demo:
sumber
Opsi formatter '% x'% tampaknya berfungsi dalam pernyataan penugasan juga untuk saya. (Dengan asumsi Python 3.0 dan yang lebih baru)
Contoh
sumber
print(b)
akan menampilkan256
, tidak100
danprint(c)
akan menampilkan100
, bukan256
. Perhatikan juga bahwac
ini adalah string, tetapia
tidak demikian dengan jawaban Anda yang benar-benar mengubah int menjadi string, bukan sebaliknya (inilah pertanyaannya).Jika Anda menggunakan interpreter python, Anda cukup mengetik 0x (nilai hex Anda) dan interpreter akan mengonversinya secara otomatis untuk Anda.
sumber
Menangani hex, oktal, biner, int, dan float
Menggunakan awalan standar (mis. 0x, 0b, 0, dan 0o) fungsi ini akan mengonversi string apa pun yang cocok menjadi angka. Saya menjawab ini di sini: https://stackoverflow.com/a/58997070/2464381 tetapi di sini adalah fungsi yang diperlukan.
sumber
Dalam Python 2.7,
int('deadbeef',10)
sepertinya tidak berfungsi.Berikut ini berfungsi untuk saya:
sumber
dengan awalan '0x', Anda mungkin juga menggunakan fungsi eval
Sebagai contoh
sumber
ast.literal_eval
.