Excel'de onaltılık bir sayıyı ondalık sayıya nasıl dönüştürebilirim?


11

Bu değeri içeren bir hücre var:

0x00006cd2c0306953

ve bunu bir sayıya dönüştürmek istiyorum.

Denedim:

=HEX2DEC(C8)

C8hex değerimi içeren hücre nerede .

#SAYI hatası alıyorum.

Neyi yanlış yapıyorum?


Bana göre C sermaye değil, küçük olabilir. yani 'c8' deneyin
Sandy8086 10:12

7
@ Sandy8086: Excel hücre kırbaçlarının kasasını umursamıyor
Nathan Fellman

Yanıtlar:


5

Sadece şunu kullanabilirsiniz:

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

len(A1)size 0xipin uzunluğunu verir . Uzunluğunu hariç tutun, 0xkalan dize onaltılık sayıdır. Dec almak için Excel işlevini kullanın.


Bunu denedin mi? Bu sayfada bir şey okudun mu? En HEX2DECfazla on onaltılık basamak kabul eden üç kez ifade edilmiştir . Sorudaki dize 0x00006cd2c0306953, 18 karakter uzunluğundadır. Çözümünüz değerlendirir RIGHT(A1,(LEN(A1)-2)); 18−2 16, yani 16 basamak uzunluğunda RIGHT(…)geri döner 00006cd2c0306953. Baştaki sıfırları kaldırsanız bile, hala çok fazla olan 12 basamağınız var . Bunu çalıştırabilirseniz, lütfen yapılandırmanızı tanımlayın. (Yani, Excel'in hangi sürümünü kullanıyorsunuz? Ve bunun işe yaramasını sağlamak için zor bir şey yaptınız mı?)
Scott

4

TwiterZX'in belirttiği gibi, Hex2Decgirişi 10 karakterle ve 6cd2c030695312 karakterle sınırlıdır . Yani bu işe yaramayacak ama bunun için kendi fonksiyonumuzu yuvarlayalım. VBA'yı kullanarak bir Modül ekleyin ve aşağıdaki kodu kullanın (ihtiyaçlarınıza göre ayarlanması gerekebilir)

' 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

Excel'de, A1 hücresinin içerdiğini 0x00006cd2c0306953, A2'nin formülünün =HexadecimalToDecimal(A1)sonuçlanacağını varsayalım 1.19652E+14. Sütunu sıfır ondalık basamaklı bir sayıya biçimlendirdiğinizde sonuç olur 119652423330131.


3

HEX2DEC 10 karakterle sınırlıdır, ancak bu onu kullanamayacağımız anlamına gelmez. Tek seferde 10 karakteri dönüştürmek ve her kullanım için 2'lik uygun gücü uygulamak için birkaç kez kullanın.

= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)

[Feragat: Şu anda test edilmemiş]

Daha sonra: Şimdi test etmeye hazır bir e-tablodayım. MID 3,5, 3,6 değiştirin. Hmm .. Hala doğru değil.

HEX2DEC'in işaretli onaltılık değerler üzerinde çalıştığı ortaya çıkıyor, bu nedenle ilk terim negatif oluyor. Neden olduğundan emin değilim, ancak düzeltmek için 2 ^ 40 (veya onaltılık çalıştığımız için 16 ^ 10) ekleyen sabit sürüm:

= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

Ancak, bu sadece SAĞ (C8,10) negatif olduğunda işe yarar. İşte benim genel çözümüm:

= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

Ugggh.


1
Sadece 40. bit işaret bitidir, bu yüzden 64 bit değerini iki 32 bit değerine bölebilirsiniz ve her zaman pozitif olacaktır. Aksi takdirde, 37 bitten daha kısa ise altıgen dizeye sıfır
koyun

2

Bu dönüştürmeyi bir işlev kullanmadan gerçekleştirmenin kirli bir yolu (bunun için bu excel forum iş parçacığına bakın), dizedeki her karakterin değerini hesaplamak ve sonra bunları toplamak için bu formülü kullanmaktır. Bu açıkça sayıyı ayrıştırmak için geçici hücrelerin kullanılmasını içerir:

=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)

Bu geçici hücreleri 1 ila 16 arasındaki satırlara yerleştirdiğinizi varsayarsak, bu, her karakteri sağdan başlayarak, bir değere dönüştürerek ve sonra 16'nın ilgili gücünü uygulayarak çıkarır. Değerinizi elde etmek için 16 hücreyi toplayın.


1
IMHO 16^(ROW() - 1)çok daha temiz ve okunması daha kolayPOWER()
phuclv

2

Takip etmeyi dene:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)

neden kullanmıyorsun 2^32?
phuclv

0

HEX numaralarına sahip sütununuzda 0x olmadığından emin olun. HEX numarası 0xC8 değil C8 olmalıdır. Umarım yardımcı olur.


0

HEX2DEC, onaltılı veya sondaki altıgen olmayan (ABCDEF0123456789) karakterler varsa başarısız olur. Alanlar gerçek bir mayındır çünkü görünmezler. Günlük dosyalarında dizeler olarak gösterilen onaltılı sayılar genellikle önde gelen ve / veya sondaki boşlukları içerir. "= HEX2DEC (TRIM (A1)) genellikle bu sorunu çözecektir. Ancak, HEX2DEC'in 10 karakter sınırlaması nedeniyle" = HEX2DEC (SAĞ (TRIM (A1), 10)) gibi bir şey gerekli olabilir.


-2

Bu işlev değişti kullanmayı deneyin

=HEXDEC(C8)

yani HEX & DEC arasında 2 numara olmadan


1
Bu hiç işe yaramıyor
Nathan Fellman

Bu işlevin dile bağlı olduğunu düşünüyorum, excel uygulamanızın ana sürümü ve sürümünüz nedir?
Riad Krim

İngilizce Office 2010
Nathan Fellman

4
HEX2DEC (veya HEXDEC) işlevi 40 bit (10 karakter) ile sınırlıdır ve sayınız
Riad Krim

Bu dil nasıl bağımlı? Böyle ,veya ;burada bir işlev ayırıcı bile yok
phuclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.