ฉันมีเซลล์ที่มีค่านี้:
0x00006cd2c0306953
และฉันต้องการแปลงเป็นตัวเลข
ฉันเหนื่อย:
=HEX2DEC(C8)
ซึ่งC8
เป็นเซลล์ที่มีค่า hex ของฉัน
ฉันพบข้อผิดพลาด #NUM
ผมทำอะไรผิดหรือเปล่า?
ฉันมีเซลล์ที่มีค่านี้:
0x00006cd2c0306953
และฉันต้องการแปลงเป็นตัวเลข
ฉันเหนื่อย:
=HEX2DEC(C8)
ซึ่งC8
เป็นเซลล์ที่มีค่า hex ของฉัน
ฉันพบข้อผิดพลาด #NUM
ผมทำอะไรผิดหรือเปล่า?
คำตอบ:
คุณสามารถใช้:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
ให้ความยาวของ0x
สตริง ยกเว้นความยาวของ0x
สตริงที่เหลือคือเลขฐานสิบหก ใช้ฟังก์ชั่น Excel เพื่อรับธันวาคม
HEX2DEC
ยอมรับสูงสุดสิบหกหลัก สตริงในคำถาม0x00006cd2c0306953
มีความยาว 18 ตัวอักษร ประเมินวิธีการแก้ปัญหาของคุณRIGHT(A1,(LEN(A1)-2))
; 18−2 เท่ากับ 16 ดังนั้นRIGHT(…)
ผลตอบแทน00006cd2c0306953
คือความยาว 16 หลัก แม้ว่าคุณจะตัดค่าศูนย์นำคุณมี 12 หลักซึ่งยังคงมากเกินไป หากคุณสามารถใช้งานได้โปรดอธิบายการกำหนดค่าของคุณ (เช่นคุณใช้ Excel รุ่นใดและคุณทำอะไรที่ยุ่งยากเพื่อให้มันใช้งานได้หรือไม่)
ตามที่ TwiterZX ระบุการHex2Dec
ป้อนข้อมูลของถูก จำกัด ไว้ที่ 10 ตัวอักษรและ6cd2c0306953
คือ 12 ตัวอักษร ดังนั้นมันจะไม่ทำงาน แต่เราจะทำหน้าที่ของเราเอง ใช้ VBA เพิ่มโมดูลและใช้รหัสต่อไปนี้ (อาจจำเป็นต้องปรับเปลี่ยนตามความต้องการของคุณ)
' 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 สมมติว่าเซลล์ A1 มี0x00006cd2c0306953
สูตร A2 ของจะส่งผลให้=HexadecimalToDecimal(A1)
รูปแบบคอลัมน์ไปยังหมายเลขที่มีศูนย์ทศนิยมและผลที่จะได้รับ1.19652E+14
119652423330131
HEX2DEC ถูก จำกัด ไว้ที่ 10 ตัวอักษร แต่นั่นไม่ได้หมายความว่าเราไม่สามารถใช้งานได้ เพียงใช้หลาย ๆ ครั้งเพื่อแปลงอักขระ 10 ตัวในแต่ละครั้งและใช้กำลังไฟที่เหมาะสม 2 กับการใช้งานแต่ละครั้ง
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[ข้อสงวนสิทธิ์: ยังไม่ทดลองในขณะนี้]
ต่อมา: ตอนนี้ฉันอยู่ที่สเปรดชีตพร้อมทดสอบ เปลี่ยน 3,5 ใน MID เป็น 3,6 อืม .. ยังไม่ถูกต้อง
ปรากฎว่า HEX2DEC กำลังทำงานกับค่าเลขฐานสิบหกที่ลงนามดังนั้นเทอมแรกจึงสิ้นสุดลงเป็นลบ ไม่แน่ใจว่าทำไม แต่นี่คือรุ่นที่แก้ไขที่เพิ่ม 2 ^ 40 (หรือ 16 ^ 10 เนื่องจากเรากำลังทำงานเป็นฐานสิบหก) เพื่อแก้ไข:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
อย่างไรก็ตามจะใช้งานได้เฉพาะในกรณีที่ RIGHT (C8,10) เกิดขึ้นเป็นลบ นี่คือโซลูชันทั่วไปของฉัน:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh
วิธีหนึ่งที่สกปรกในการทำการแปลงนี้โดยไม่ต้องใช้ฟังก์ชั่น (ดูหัวข้อฟอรัม excelสำหรับเรื่องนี้) คือการใช้สูตรนี้เพื่อคำนวณค่าของอักขระแต่ละตัวในสตริงจากนั้นจึงสรุปผล เรื่องนี้เกี่ยวข้องกับการใช้เซลล์ชั่วคราวเพื่อสลายจำนวน:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
สมมติว่าคุณวางเซลล์ temp เหล่านี้ลงในแถวที่ 1 ถึง 16 วิธีนี้จะทำงานโดยการแยกอักขระแต่ละตัวเริ่มต้นจากด้านขวาแปลงเป็นค่าจากนั้นใช้พลังที่เกี่ยวข้องเท่ากับ 16 รวม 16 เซลล์ทั้งหมดเพื่อรับค่าของคุณ
16^(ROW() - 1)
นั้นสะอาดกว่าและอ่านง่ายกว่าPOWER()
ลองทำสิ่งต่อไปนี้:
=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
2^32
?
ตรวจสอบให้แน่ใจว่าคอลัมน์ของคุณที่มีหมายเลข HEX ไม่มี 0x หมายเลข HEX ควรเป็น C8 ไม่ใช่ 0xC8 หวังว่ามันจะช่วย
HEX2DEC ล้มเหลวหากมีอักขระนำหน้าหรือต่อท้ายที่ไม่ใช่ hex (ABCDEF0123456789) ช่องว่างเป็นระเบิดจริงเพราะมองไม่เห็น บ่อยครั้งที่เลขฐานสิบหกแสดงเป็นสตริงในไฟล์บันทึกมีช่องว่างนำหน้าและ / หรือช่องว่างต่อท้าย ฉันพบว่า "= HEX2DEC (TRIM (A1)) มักจะแก้ไขปัญหานี้อย่างไรก็ตามสิ่งเช่น" = HEX2DEC (RIGHT (TRIM (A1), 10)) อาจจำเป็นเนื่องจากข้อ จำกัด 10 อักขระของ HEX2DEC
ฟังก์ชั่นนี้มีการเปลี่ยนแปลงลองใช้
=HEXDEC(C8)
ดังนั้นไม่มีหมายเลข 2 ระหว่าง HEX & DEC
,
หรือ;
ที่นี่