Làm cách nào tôi có thể chuyển đổi số hex thành số thập phân trong Excel?


11

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 C8là ô chứa giá trị hex của tôi.

Tôi gặp lỗi #NUM.

Tôi đang làm gì sai?


theo tôi C không có vốn thì có thể nhỏ. vì vậy hãy thử 'c8'
Sandy8086

7
@ Sandy8086: Excel không quan tâm đến trường hợp của phân tế bào
Nathan Fellman

Câu trả lời:


5

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 0xchuỗ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.


Bạn đã thử điều này? Bạn đã đọc bất cứ điều gì trên trang này? Nó đã được tuyên bố ba lần HEX2DECchấp nhận tối đa mười chữ số hex. Chuỗi trong câu hỏi, 0x00006cd2c0306953dà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?)
Scott

4

Như TwiterZX đã chỉ ra, Hex2Decđầu vào của bị giới hạn ở 10 ký tự và 6cd2c0306953là 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.


3

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.


1
Chỉ bit thứ 40 là bit dấu, vì vậy bạn chỉ có thể chia giá trị 64 bit thành hai giá trị 32 bit và nó sẽ luôn dương.
Mặt

2

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.


1
IMHO 16^(ROW() - 1)sạch sẽ và dễ đọc hơn nhiềuPOWER()
phuclv

2

Hãy thử như sau:

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

Tại sao không sử dụng 2^32?
phuclv

0

Đả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.


0

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.


-2

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


1
Điều này hoàn toàn không hoạt động
Nathan Fellman

Tôi nghĩ chức năng này phụ thuộc vào ngôn ngữ, ngôn ngữ chính của ứng dụng excel và phiên bản của bạn là gì ..?
Riad Krim

Văn phòng 2010 bằng tiếng Anh
Nathan Fellman

4
Hàm HEX2DEC (hoặc HEXDEC) bị giới hạn ở 40 bit (10 ký tự) và số của bạn là 12 ký tự office.microsoft.com/en-us/excel-help/ trộm
Riad Krim

Làm thế nào để ngôn ngữ này phụ thuộc? Thậm chí không có trình phân tách chức năng như ,hoặc ;ở đây
phuclv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.