Mam komórkę zawierającą tę wartość:
0x00006cd2c0306953
i chcę przekonwertować go na liczbę.
Próbowałem:
=HEX2DEC(C8)
gdzie C8
jest komórka zawierająca moją wartość szesnastkową.
Otrzymuję błąd # LICZBA.
Co ja robię źle?
microsoft-excel
conversion
hexadecimal
Nathan Fellman
źródło
źródło
Odpowiedzi:
Możesz po prostu użyć:
len(A1)
daje ci długość0x
sznurka. Wyklucz długość0x
, pozostały ciąg to liczba szesnastkowa. Użyj funkcji Excela, aby uzyskać dec.źródło
HEX2DEC
akceptuje maksymalnie dziesięć cyfr szesnastkowych. Ciąg w pytaniu0x00006cd2c0306953
ma 18 znaków. Twoje rozwiązanie oceniaRIGHT(A1,(LEN(A1)-2))
; 18-2 to 16, więcRIGHT(…)
zwraca00006cd2c0306953
16 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?)Jak wskazał TwiterZX,
Hex2Dec
dane wejściowe są ograniczone do 10 znaków i6cd2c0306953
12 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)W Excelu, powiedzmy, komórka A1 zawiera
0x00006cd2c0306953
, formuła A2=HexadecimalToDecimal(A1)
spowoduje1.19652E+14
. Sformatuj kolumnę na liczbę z zerowymi miejscami po przecinku, a wynikiem będzie119652423330131
.źródło
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.
[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ć:
Działa to jednak tylko wtedy, gdy PRAWO (C8,10) okazuje się być ujemne. Oto moje ogólne rozwiązanie:
Ugggh.
źródło
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:
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ść.
źródło
16^(ROW() - 1)
jest znacznie czystszy i łatwiejszy do odczytania niżPOWER()
Spróbuj wykonać następujące czynności:
źródło
2^32
?Upewnij się, że kolumna z numerami HEX nie ma 0x. Numer HEX powinien wynosić C8, a nie 0xC8. Mam nadzieję, że to pomoże.
źródło
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.
źródło
Ta funkcja uległa zmianie. Spróbuj użyć
więc bez numeru 2 między HEX i DEC
źródło
,
lub;
tutaj