ฉันจะแปลงเลขฐานสิบหกเป็นตัวเลขทศนิยมใน Excel ได้อย่างไร


11

ฉันมีเซลล์ที่มีค่านี้:

0x00006cd2c0306953

และฉันต้องการแปลงเป็นตัวเลข

ฉันเหนื่อย:

=HEX2DEC(C8)

ซึ่งC8เป็นเซลล์ที่มีค่า hex ของฉัน

ฉันพบข้อผิดพลาด #NUM

ผมทำอะไรผิดหรือเปล่า?


ตามที่ฉัน C ไม่ได้ทุนมันอาจจะเล็ก ดังนั้นลอง 'c8'
Sandy8086

7
@ Sandy8086: Excel ไม่สนใจเกี่ยวกับกรณีของเซลล์ indeces
Nathan Fellman

คำตอบ:


5

คุณสามารถใช้:

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 รุ่นใดและคุณทำอะไรที่ยุ่งยากเพื่อให้มันใช้งานได้หรือไม่)
สกอตต์

4

ตามที่ 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+14119652423330131


3

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


1
เฉพาะบิตที่ 40 เท่านั้นคือบิตการลงชื่อดังนั้นคุณสามารถแยกค่า 64- บิตเป็นสองค่า 32- บิตและมันจะเป็นค่าบวกเสมอ มิฉะนั้นให้ตั้งศูนย์เป็นสตริง
เลข

2

วิธีหนึ่งที่สกปรกในการทำการแปลงนี้โดยไม่ต้องใช้ฟังก์ชั่น (ดูหัวข้อฟอรัม excelสำหรับเรื่องนี้) คือการใช้สูตรนี้เพื่อคำนวณค่าของอักขระแต่ละตัวในสตริงจากนั้นจึงสรุปผล เรื่องนี้เกี่ยวข้องกับการใช้เซลล์ชั่วคราวเพื่อสลายจำนวน:

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

สมมติว่าคุณวางเซลล์ temp เหล่านี้ลงในแถวที่ 1 ถึง 16 วิธีนี้จะทำงานโดยการแยกอักขระแต่ละตัวเริ่มต้นจากด้านขวาแปลงเป็นค่าจากนั้นใช้พลังที่เกี่ยวข้องเท่ากับ 16 รวม 16 เซลล์ทั้งหมดเพื่อรับค่าของคุณ


1
IMHO 16^(ROW() - 1)นั้นสะอาดกว่าและอ่านง่ายกว่าPOWER()
phuclv


0

ตรวจสอบให้แน่ใจว่าคอลัมน์ของคุณที่มีหมายเลข HEX ไม่มี 0x หมายเลข HEX ควรเป็น C8 ไม่ใช่ 0xC8 หวังว่ามันจะช่วย


0

HEX2DEC ล้มเหลวหากมีอักขระนำหน้าหรือต่อท้ายที่ไม่ใช่ hex (ABCDEF0123456789) ช่องว่างเป็นระเบิดจริงเพราะมองไม่เห็น บ่อยครั้งที่เลขฐานสิบหกแสดงเป็นสตริงในไฟล์บันทึกมีช่องว่างนำหน้าและ / หรือช่องว่างต่อท้าย ฉันพบว่า "= HEX2DEC (TRIM (A1)) มักจะแก้ไขปัญหานี้อย่างไรก็ตามสิ่งเช่น" = HEX2DEC (RIGHT (TRIM (A1), 10)) อาจจำเป็นเนื่องจากข้อ จำกัด 10 อักขระของ HEX2DEC


-2

ฟังก์ชั่นนี้มีการเปลี่ยนแปลงลองใช้

=HEXDEC(C8)

ดังนั้นไม่มีหมายเลข 2 ระหว่าง HEX & DEC


1
สิ่งนี้ใช้ไม่ได้เลย
Nathan Fellman

ฉันคิดว่าฟังก์ชั่นนี้ขึ้นอยู่กับภาษาภาษาหลักของแอป excel ของคุณคืออะไรและเวอร์ชั่นของคุณ .. ?
Riad Krim

Office 2010 เป็นภาษาอังกฤษ
Nathan Fellman

4
ฟังก์ชัน HEX2DEC (หรือ HEXDEC) จำกัด ไว้ที่ 40 บิต (10 ตัวอักษร) และหมายเลขของคุณคือ 12 ตัวอักษร office.microsoft.com/en-us/excel-help/…
Riad Krim

ภาษานี้ขึ้นอยู่กับว่าอย่างไร ไม่มีแม้กระทั่งตัวคั่นฟังก์ชันเช่น,หรือ;ที่นี่
phuclv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.