Jak przekonwertować liczbę szesnastkową na liczbę dziesiętną w programie Excel?

11

Mam komórkę zawierającą tę wartość:

0x00006cd2c0306953

i chcę przekonwertować go na liczbę.

Próbowałem:

=HEX2DEC(C8)

gdzie C8jest komórka zawierająca moją wartość szesnastkową.

Otrzymuję błąd # LICZBA.

Co ja robię źle?

Nathan Fellman
źródło
według mnie C nie jest kapitałem, może być małe. więc spróbuj „c8”
Sandy8086,
7
@ Sandy8086: Excel nie dba o przypadek nieprzyzwoitych komórek
Nathan Fellman,

Odpowiedzi:

5

Możesz po prostu użyć:

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

len(A1)daje ci długość 0xsznurka. Wyklucz długość 0x, pozostały ciąg to liczba szesnastkowa. Użyj funkcji Excela, aby uzyskać dec.

Vegeta
źródło
Próbowałeś tego? Czy przeczytałeś coś na tej stronie? Trzykrotnie stwierdzono, że HEX2DECakceptuje maksymalnie dziesięć cyfr szesnastkowych. Ciąg w pytaniu 0x00006cd2c0306953ma 18 znaków. Twoje rozwiązanie ocenia RIGHT(A1,(LEN(A1)-2)); 18-2 to 16, więc RIGHT(…)zwraca 00006cd2c030695316 cyfr. Nawet jeśli usuniesz początkowe zera, masz 12 cyfr, co wciąż jest zbyt wiele. Jeśli możesz to zrobić, opisz swoją konfigurację. (Tj. Jakiej wersji programu Excel używasz? Czy zrobiłeś coś trudnego, aby to zadziałało?)
Scott,
4

Jak wskazał TwiterZX, Hex2Decdane wejściowe są ograniczone do 10 znaków i 6cd2c030695312 znaków. To nie zadziała, ale uruchommy do tego naszą własną funkcję. Za pomocą VBA dodaj moduł i użyj następującego kodu (może wymagać dostosowania w zależności od potrzeb)

' 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

W Excelu, powiedzmy, komórka A1 zawiera 0x00006cd2c0306953, formuła A2 =HexadecimalToDecimal(A1)spowoduje 1.19652E+14. Sformatuj kolumnę na liczbę z zerowymi miejscami po przecinku, a wynikiem będzie 119652423330131.

zedfoxus
źródło
3

HEX2DEC jest ograniczony do 10 znaków, ale to nie znaczy, że nie możemy go użyć. Po prostu użyj go kilka razy, aby przekonwertować 10 znaków na raz i zastosować odpowiednią moc 2 do każdego użycia.

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

[Uwaga: W tej chwili niesprawdzone]

Później: jestem teraz w arkuszu kalkulacyjnym, gotowy do przetestowania. Zmień 3,5 w MID na 3,6. Hmm .. Nadal nie tak.

Okazuje się, że HEX2DEC pracuje na podpisanych wartościach szesnastkowych, więc pierwszy termin jest ujemny. Nie jestem pewien, dlaczego, ale oto stała wersja, która dodaje 2 ^ 40 (lub 16 ^ 10, ponieważ pracujemy w trybie szesnastkowym), aby naprawić:

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

Działa to jednak tylko wtedy, gdy PRAWO (C8,10) okazuje się być ujemne. Oto moje ogólne rozwiązanie:

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

Ugggh.

Bill Nace
źródło
1
Tylko 40 bit jest znakiem, więc możesz po prostu podzielić wartość 64-bitową na dwie wartości 32-bitowe i zawsze będzie ona dodatnia. W przeciwnym razie
wstaw
2

Jednym brudnym sposobem na wykonanie tej konwersji bez użycia funkcji (zobacz ten wątek forum programu Excel w tym celu) jest użycie tej formuły do ​​obliczenia wartości każdego znaku w ciągu, a następnie zsumowanie ich. Obejmuje to oczywiście użycie tymczasowych komórek do rozłożenia liczby:

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

Zakładając, że umieścisz te komórki tymczasowe w rzędach od 1 do 16, działa to poprzez wyodrębnienie każdego znaku, zaczynając od prawej strony, przekształcając go w wartość, a następnie stosując odpowiednią moc 16. Zsumuj wszystkie 16 komórek, aby uzyskać wartość.

Dominique Jacquel
źródło
1
IMHO 16^(ROW() - 1)jest znacznie czystszy i łatwiejszy do odczytania niżPOWER()
phuclv
2

Spróbuj wykonać następujące czynności:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Staś
źródło
dlaczego nie korzystać 2^32?
phuclv
0

Upewnij się, że kolumna z numerami HEX nie ma 0x. Numer HEX powinien wynosić C8, a nie 0xC8. Mam nadzieję, że to pomoże.

użytkownik2794645
źródło
0

HEX2DEC kończy się niepowodzeniem, jeśli są jakieś wiodące lub końcowe nie-szesnastkowe znaki (ABCDEF0123456789). Przestrzenie są prawdziwą miną, ponieważ nie są widoczne. Często liczby szesnastkowe, reprezentowane jako ciągi znaków, w plikach dziennika zawierają początkowe i / lub końcowe spacje. Uważam, że „= HEX2DEC (TRIM (A1)) zazwyczaj rozwiązuje ten problem. Jednak coś w rodzaju„ = HEX2DEC (PRAWY (TRIM (A1), 10), może być konieczne ze względu na ograniczenie 10 znaków w HEX2DEC.

George H. Barbehenn
źródło
-2

Ta funkcja uległa zmianie. Spróbuj użyć

=HEXDEC(C8)

więc bez numeru 2 między HEX i DEC

Riad Krim
źródło
1
To w ogóle nie działa
Nathan Fellman
Myślę, że ta funkcja zależy od języka, jaki jest główny język twojej aplikacji Excel i twojej wersji ..?
Riad Krim,
Office 2010 w języku angielskim
Nathan Fellman
4
Funkcja HEX2DEC (lub HEXDEC) jest ograniczona do 40 bitów (10 znaków), a twój numer to 12 znaków office.microsoft.com/en-us/excel-help/…
Riad Krim
Jaka jest zależność tego języka? Nie jest nawet funkcja jak separator ,lub ;tutaj
phuclv