Saya memiliki sel yang berisi nilai ini:
0x00006cd2c0306953
dan saya ingin mengubahnya menjadi angka.
Saya mencoba:
=HEX2DEC(C8)
di mana C8
sel berisi nilai hex saya.
Saya mendapatkan kesalahan #NUM.
Apa yang saya lakukan salah?
Saya memiliki sel yang berisi nilai ini:
0x00006cd2c0306953
dan saya ingin mengubahnya menjadi angka.
Saya mencoba:
=HEX2DEC(C8)
di mana C8
sel berisi nilai hex saya.
Saya mendapatkan kesalahan #NUM.
Apa yang saya lakukan salah?
Jawaban:
Anda cukup menggunakan:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
memberi Anda panjang 0x
string. Tidak termasuk panjang 0x
, string yang tersisa adalah nomor hex. Gunakan fungsi Excel untuk mendapatkan keputusan.
HEX2DEC
menerima maksimal sepuluh digit hex. String dalam pertanyaan 0x00006cd2c0306953
,, adalah 18 karakter. Solusi Anda mengevaluasi RIGHT(A1,(LEN(A1)-2))
; 18−2 adalah 16, jadi RIGHT(…)
kembali 00006cd2c0306953
, yang panjangnya 16 digit. Bahkan jika Anda melepaskan nol di depan, Anda memiliki 12 digit, yang masih terlalu banyak. Jika Anda bisa membuatnya berfungsi, jelaskan konfigurasi Anda. (Yaitu, versi Excel apa yang Anda gunakan? Dan apakah Anda melakukan sesuatu yang sulit untuk membuatnya berfungsi?)
Seperti yang ditunjukkan oleh TwiterZX, Hex2Dec
input dibatasi hingga 10 karakter dan 6cd2c0306953
12 karakter. Jadi itu tidak akan berhasil, tetapi mari kita gulir fungsi kita sendiri untuk itu. Menggunakan VBA, tambahkan Modul dan gunakan kode berikut (mungkin perlu disesuaikan berdasarkan kebutuhan Anda)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
Di Excel, katakanlah sel A1 berisi 0x00006cd2c0306953
, rumus A2 =HexadecimalToDecimal(A1)
akan menghasilkan 1.19652E+14
. Format kolom ke angka dengan nol desimal dan hasilnya akan 119652423330131
.
HEX2DEC terbatas hingga 10 karakter, tetapi itu tidak berarti kita tidak dapat menggunakannya. Cukup gunakan beberapa kali, untuk mengonversi 10 karakter sekaligus dan menerapkan daya 2 yang sesuai untuk setiap penggunaan.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Penafian: Belum teruji saat ini]
Kemudian: Saya sekarang di spreadsheet, siap untuk diuji. Ubah 3,5 di MID menjadi 3,6. Hmm .. Masih tidak benar.
Ternyata HEX2DEC bekerja pada nilai hex yang ditandatangani, jadi istilah pertama berakhir menjadi negatif. Tidak yakin mengapa, tetapi di sini adalah versi tetap yang menambahkan 2 ^ 40 (atau 16 ^ 10, karena kami sedang mengerjakan hex) untuk memperbaikinya:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Namun, itu hanya berfungsi jika HAK (C8, 10) kebetulan negatif. Inilah solusi umum saya:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugh.
Salah satu cara kotor untuk melakukan konversi ini, tanpa menggunakan fungsi (lihat utas forum excel ini untuk itu) adalah dengan menggunakan rumus ini untuk menghitung nilai setiap karakter dalam string, lalu jumlahkan semuanya. Ini jelas melibatkan penggunaan sel sementara untuk menguraikan angka:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Dengan asumsi Anda menempatkan sel temp ini pada baris 1 hingga 16, ini berfungsi dengan mengekstraksi setiap karakter, mulai dari kanan, mengubahnya menjadi nilai, lalu menerapkan kekuatan yang relevan dari 16. Jumlahkan semua 16 sel untuk mendapatkan nilai Anda.
16^(ROW() - 1)
jauh lebih bersih dan lebih mudah dibaca daripadaPOWER()
Pastikan kolom Anda yang memiliki nomor HEX tidak memiliki 0x. Nomor HEX harus C8, bukan 0xC8. Semoga ini bisa membantu.
HEX2DEC gagal jika ada karakter non-hex (ABCDEF0123456789) terkemuka atau tertinggal. Spasi adalah ranjau darat yang nyata karena tidak terlihat. Seringkali angka hex, direpresentasikan sebagai string, dalam file log berisi spasi terdepan dan / atau trailing. Saya menemukan bahwa "= HEX2DEC (TRIM (A1)) biasanya akan memperbaiki masalah ini. Namun, sesuatu seperti" = HEX2DEC (KANAN (TRIM (A1), 10), mungkin diperlukan karena batasan 10 karakter HEX2DEC.
Fungsi ini telah berubah coba gunakan
=HEXDEC(C8)
jadi tanpa nomor 2 antara HEX & DEC
,
atau di ;
sini