Tôi có một ô chứa giá trị này:
0x00006cd2c0306953
và tôi muốn chuyển đổi nó thành một số.
Tôi đã thử:
=HEX2DEC(C8)
nơi C8
là ô chứa giá trị hex của tôi.
Tôi gặp lỗi #NUM.
Tôi đang làm gì sai?
Tôi có một ô chứa giá trị này:
0x00006cd2c0306953
và tôi muốn chuyển đổi nó thành một số.
Tôi đã thử:
=HEX2DEC(C8)
nơi C8
là ô chứa giá trị hex của tôi.
Tôi gặp lỗi #NUM.
Tôi đang làm gì sai?
Câu trả lời:
Bạn chỉ có thể sử dụng:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
cung cấp cho bạn độ dài của 0x
chuỗi. Không bao gồm độ dài của 0x
, chuỗi còn lại là số hex. Sử dụng hàm Excel để lấy dec.
HEX2DEC
chấp nhận tối đa mười chữ số hex. Chuỗi trong câu hỏi, 0x00006cd2c0306953
dài 18 ký tự. Giải pháp của bạn đánh giá RIGHT(A1,(LEN(A1)-2))
; 18−2 là 16, vì vậy RIGHT(…)
trả về 00006cd2c0306953
, dài 16 chữ số. Ngay cả khi bạn loại bỏ các số 0 đứng đầu, bạn có 12 chữ số, vẫn còn quá nhiều. Nếu bạn có thể làm điều này để làm việc, xin vui lòng mô tả cấu hình của bạn. (Tức là, bạn đang sử dụng phiên bản Excel nào? Và bạn có làm điều gì khó khăn để làm việc này không?)
Như TwiterZX đã chỉ ra, Hex2Dec
đầu vào của bị giới hạn ở 10 ký tự và 6cd2c0306953
là 12 ký tự. Vì vậy, nó sẽ không hoạt động nhưng chúng ta hãy cuộn chức năng của chúng ta cho điều đó. Sử dụng VBA, thêm Mô-đun và sử dụng mã sau (có thể cần được điều chỉnh dựa trên nhu cầu của bạn)
' 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
Trong Excel, giả sử ô A1 chứa 0x00006cd2c0306953
, công thức của A2 =HexadecimalToDecimal(A1)
sẽ dẫn đến 1.19652E+14
. Định dạng cột thành một số có số thập phân bằng 0 và kết quả sẽ là 119652423330131
.
HEX2DEC bị giới hạn ở 10 ký tự, nhưng điều đó không có nghĩa là chúng tôi không thể sử dụng nó. Đơn giản chỉ cần sử dụng nhiều lần, để chuyển đổi 10 ký tự cùng một lúc và áp dụng sức mạnh phù hợp là 2 cho mỗi lần sử dụng.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Tuyên bố từ chối trách nhiệm: Chưa được kiểm tra tại thời điểm này]
Sau này: Bây giờ tôi đang ở một bảng tính, sẵn sàng để thử nghiệm. Thay đổi 3,5 trong MID thành 3,6. Hmm .. Vẫn không đúng.
Hóa ra HEX2DEC đang làm việc trên các giá trị hex đã ký, vì vậy thuật ngữ đầu tiên kết thúc là âm. Không chắc chắn tại sao, nhưng đây là phiên bản cố định có thêm 2 ^ 40 (hoặc 16 ^ 10, khi chúng tôi đang làm việc trong hex) để khắc phục:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Tuy nhiên, điều đó chỉ hoạt động nếu RIGHT (C8,10) xảy ra âm tính. Đây là giải pháp chung của tôi:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Xin chào.
Một cách bẩn thỉu để thực hiện việc hội tụ này, mà không sử dụng hàm (xem chủ đề diễn đàn excel này ) là sử dụng công thức này để tính giá trị của từng ký tự trong chuỗi, sau đó tổng hợp chúng lại. Điều này rõ ràng liên quan đến việc sử dụng các tế bào tạm thời để phân tách số lượng:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Giả sử bạn đặt các ô tạm thời này trên các hàng từ 1 đến 16, việc này sẽ hoạt động bằng cách trích xuất từng ký tự, bắt đầu từ bên phải, chuyển đổi thành giá trị, sau đó áp dụng sức mạnh liên quan của 16. Tổng hợp tất cả 16 ô để nhận giá trị của bạn.
16^(ROW() - 1)
sạch sẽ và dễ đọc hơn nhiềuPOWER()
Đảm bảo rằng cột của bạn có số HEX không có 0x. Số HEX phải là C8, không phải 0xC8. Hy vọng nó giúp.
HEX2DEC không thành công nếu có bất kỳ ký tự không hex (ABCDEF0123456789) hàng đầu hoặc dấu. Không gian là một quả mìn thực sự bởi vì chúng không thể nhìn thấy. Thông thường các số hex, được biểu thị dưới dạng chuỗi, trong tệp nhật ký chứa khoảng trắng ở đầu và / hoặc dấu. Tôi thấy rằng "= HEX2DEC (TRIM (A1)) thường sẽ khắc phục vấn đề này. Tuy nhiên, một cái gì đó như" = HEX2DEC (RIGHT (TRIM (A1), 10), có thể cần thiết do giới hạn 10 ký tự của HEX2DEC.
Chức năng này đã thay đổi thử sử dụng
=HEXDEC(C8)
vì vậy không có số 2 giữa HEX & DEC
,
hoặc ;
ở đây