如何在Excel中不使用VBA在HEX和DEC之间转换大数?

问题描述 投票:0回答:3

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
转换为十六进制值,我只会收到错误。

有人有解决方法的想法吗?是否可以将十六进制/十进制值分成两部分,将其转换并重新组合在一起?目前我没有想法。

溶液不得含有VBA。 Office365的新功能可以使用,我已经使用了很多位移位和位异或。

谢谢你

excel office365 excel-2010 number-formatting excel-365
3个回答
3
投票

你可以使用补码的奇迹:

=DEC2HEX(IF(A1>=POWER(2,39),A1-POWER(2,40),A1))

还有

=IF(HEX2DEC(A1)<0, HEX2DEC(A1)+POWER(2,40), HEX2DEC(A1))

为逆。


1
投票

我无法改进@Jeroen对这个特定问题的回答,但值得一提的是,如果您可以使用Excel 365函数(实际上从Excel 2013开始),您可以使用Base函数而不是Dec2Hex来处理最多2^53的数字-1:

=BASE(A1,16)

据我所知,基本函数没有逆函数,但你可以像这样将一些东西组合在一起:

=LET(L,LEN(B1),seq,SEQUENCE(L),SUM((FIND(MID(B1,seq,1),"0123456789ABCDEF")-1)*16^(L-seq)))

enter image description here


0
投票

这是一个很好的公式

值得制作成 lambda

但您也可以为任何基地制作它。

对于那些不了解 lambda 的人,可以将以下公式放入名称管理器中。

=LAMBDA(number,base,LET(base,IF(ISOMITTED(base),16,base),glyphseq,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz_!",digits,LEFT(glyphseq,base),L,LEN(number),seq,SEQUENCE(L),chars,FIND(MID(number,seq,1),glyphseq)-1,IF(MAX(chars)+1<=base,SUM((chars)*base^(L-seq)),"invalid characters present for base "&base&". Lowest base number can be "&MAX(chars)+1)))

然后在单元格中,如果名称称为 TOBASE10,这将是其用法

=TOBASE10(“Aa!”,64) result: 43227
=TOBASE10(“3F”,16) result: 63
=TOBASE10(111111,2) result: 63
=TOBASE10(“3f”,16) result: invalid (should be uppercase)
=TOBASE10(“F”,2) result: invalid message

注意:我用过_!作为 62 和 63 的编码,这避免了 +/$=*- excel 语法字符(并不是说它会导致文本问题,而是有时很难在单元格中键入这些字符,而 Wxcel 不会认为您正在制定一个公式,迫使您以 ') 开头 更改编码以适应您的需求,因为还有其他风格。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.