如何在不使用 VBA 的情况下在 Excel 中将大数在 HEX 和 DEC 之间转换?
How to convert big numbers between HEX and DEC in Excel without using VBA?
Excel-函数 =HEXTODEC(hex)
和 =DECTOHEX(dec)
工作正常,但只能达到 0x7F FF FF FF FF
的十六进制值。我需要将数字转换为 0xFF FF FF FF FF
。从 0x80 00 00 00 00
Excel 开始,可悲地开始将 is 解释为带符号的值并将其转换为负十进制。如果我尝试将 549 755 813 888
转换为十六进制值,我只会得到一个错误。
有人有解决方法吗?是否可以将 hex/dec 值分成两部分,将其转换并重新组合在一起?目前我没有想法。
解决方案不应包含VBA。 Office365的新功能可以用了,我已经用了很多移位和位异或了。
谢谢
你可以使用二进制补码的奇迹:
=DEC2HEX(IF(A1>=POWER(2,39),A1-POWER(2,40),A1))
和
=IF(HEX2DEC(A1)<0, HEX2DEC(A1)+POWER(2,40), HEX2DEC(A1))
为逆。
我无法改进@Jeroen 对这个具体问题的回答,但值得一提的是,如果您可以使用 Excel 365 函数(实际上是从 Excel 2013 年开始),您可以使用对于 2^53-1 以内的数字,基本函数而不是 Dec2Hex:
=BASE(A1,16)
据我所知,没有 Base 函数的反函数,但你可以像这样将某些东西组合在一起:
=LET(L,LEN(B1),seq,SEQUENCE(L),SUM((FIND(MID(B1,seq,1),"0123456789ABCDEF")-1)*16^(L-seq)))
Excel-函数 =HEXTODEC(hex)
和 =DECTOHEX(dec)
工作正常,但只能达到 0x7F FF FF FF FF
的十六进制值。我需要将数字转换为 0xFF FF FF FF FF
。从 0x80 00 00 00 00
Excel 开始,可悲地开始将 is 解释为带符号的值并将其转换为负十进制。如果我尝试将 549 755 813 888
转换为十六进制值,我只会得到一个错误。
有人有解决方法吗?是否可以将 hex/dec 值分成两部分,将其转换并重新组合在一起?目前我没有想法。
解决方案不应包含VBA。 Office365的新功能可以用了,我已经用了很多移位和位异或了。
谢谢
你可以使用二进制补码的奇迹:
=DEC2HEX(IF(A1>=POWER(2,39),A1-POWER(2,40),A1))
和
=IF(HEX2DEC(A1)<0, HEX2DEC(A1)+POWER(2,40), HEX2DEC(A1))
为逆。
我无法改进@Jeroen 对这个具体问题的回答,但值得一提的是,如果您可以使用 Excel 365 函数(实际上是从 Excel 2013 年开始),您可以使用对于 2^53-1 以内的数字,基本函数而不是 Dec2Hex:
=BASE(A1,16)
据我所知,没有 Base 函数的反函数,但你可以像这样将某些东西组合在一起:
=LET(L,LEN(B1),seq,SEQUENCE(L),SUM((FIND(MID(B1,seq,1),"0123456789ABCDEF")-1)*16^(L-seq)))