Bagaimana saya bisa mengkonversi nomor hex ke angka desimal di Excel?

11

Saya memiliki sel yang berisi nilai ini:

0x00006cd2c0306953

dan saya ingin mengubahnya menjadi angka.

Saya mencoba:

=HEX2DEC(C8)

di mana C8sel berisi nilai hex saya.

Saya mendapatkan kesalahan #NUM.

Apa yang saya lakukan salah?

Nathan Fellman
sumber
menurut saya C bukan modal mungkin kecil. jadi coba 'c8'
Sandy8086
7
@ Sandy8086: Excel tidak peduli dengan kasus pembajakan sel
Nathan Fellman

Jawaban:

5

Anda cukup menggunakan:

HEX2DEC(right(A1,(len(A1)-2)))

len(A1)memberi Anda panjang 0xstring. Tidak termasuk panjang 0x, string yang tersisa adalah nomor hex. Gunakan fungsi Excel untuk mendapatkan keputusan.

Vegeta
sumber
Sudahkah Anda mencoba ini? Sudahkah Anda membaca sesuatu di halaman ini? Telah dinyatakan tiga kali yang HEX2DECmenerima 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?)
Scott
4

Seperti yang ditunjukkan oleh TwiterZX, Hex2Decinput dibatasi hingga 10 karakter dan 6cd2c030695312 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.

zedfoxus
sumber
3

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.

Bill Nace
sumber
1
Hanya bit ke-40 yang merupakan bit tanda, jadi Anda bisa membagi nilai 64-bit ke dua nilai 32-bit dan akan selalu positif. Kalau tidak
masukkan
2

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.

Dominique Jacquel
sumber
1
IMHO 16^(ROW() - 1)jauh lebih bersih dan lebih mudah dibaca daripadaPOWER()
phuclv
2

Coba yang berikut ini:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Stas
sumber
kenapa tidak digunakan 2^32?
phuclv
0

Pastikan kolom Anda yang memiliki nomor HEX tidak memiliki 0x. Nomor HEX harus C8, bukan 0xC8. Semoga ini bisa membantu.

pengguna2794645
sumber
0

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.

George H. Barbehenn
sumber
-2

Fungsi ini telah berubah coba gunakan

=HEXDEC(C8)

jadi tanpa nomor 2 antara HEX & DEC

Riad Krim
sumber
1
Ini tidak bekerja sama sekali
Nathan Fellman
Saya pikir fungsi ini tergantung pada bahasa, apa bahasa utama aplikasi excel Anda, dan versi Anda ..?
Riad Krim
Office 2010 dalam bahasa Inggris
Nathan Fellman
4
Fungsi HEX2DEC (atau HEXDEC) terbatas hingga 40 bit (10 karakter), dan nomor Anda adalah 12 karakter office.microsoft.com/en-us/excel-help/…
Riad Krim
Bagaimana bahasa ini bergantung? Bahkan tidak ada pemisah fungsi seperti ,atau di ;sini
phuclv