2011-03-27 328 views
2

我必须承认,我不太记得HEX等学校(25年前)。无论如何,我有一些十进制格式的值,我需要将其转换为HEX格式。我正在使用Excel,但如果有必要,我可以在VBA中编写一个函数(或者通过VB.NET中的代码执行)。将负数十进制数转换为HEX

我已经知道十六进制结果应该是什么样子(另一个来源),但我需要使用Excel来完全得到这个结果。十进制输入的来源以及(右)十六进制结果的结果来自Linux系统,如果知道这一点很重要的话。

正数转换似乎是正确的,而负数会给我一个头痛的问题,就是Excel与HEX增加两个附加字母(两个FF)相比,我想要的结果更令人头疼。

实施例: 十进制输入:-524288

正确HEX输出I必须获得:FFF80000

在Excel使用公式获得:FFFFF80000 (I得到2 FF额外在HEX的开头-output)

又如:

十进制输入:-29446758

应该FE3EAD9A

,但在Excel中,我得到FFFE3EAD9A

好像我总是在HEX输出2个额外的FF。

有人可以解释(以一种简单的方式)为什么我得到2额外的FF,如果我可以安全地删除它们?

回答

4

在Excel中,=DEC2HEX

相反,你应该使用一些VBA。

如果你想要得到的只是8,你的问题建议使用:

=DEC2HEX(A1,8) 

然而,除非你有一个兼容性问题,你可以离开了默认号码。请记住,“F”字符作为填充字符的负数(对于正数来说,“0”是相同的)。

编辑

以上失败的底片,如您在您的评论说。

以下工作:

=RIGHT(DEC2HEX(A1),8) 
+0

不适用于负数。抱歉。 – 2011-03-27 19:05:57

+0

THx - 函数= RIGHT(DEC2HEX(A1),8)semms完美工作。感谢解释= DEC2HEX总是返回10个字符,多余的FF只是填充字符。这对我来说是最快的解决方案。 – moster67 2011-03-27 19:42:37

0

我不太清楚你在做什么,因为你没有包括你的公式。我的猜测是,你正在使用这样的功能:

=DEC2HEX(A1) 

虽然它有一个可选的参数来控制多少个数字返回,当输入为负不起作用。默认返回10个字符

Public Function DecToHex(val As Variant) As Variant 

DecToHex = Hex(val) 

End Function 
+0

大卫,在调试窗口,我输入一个数字,它的负面,结果是不一样的数以负: ? Hex $(29446758) 1C15266 ? Hex $( - 29446758) FE3EAD9A – 2011-03-27 18:57:49

+0

@Doug它是补充。例如'Hex(2)= 02'和'Hex(-2)= FE' – 2011-03-27 19:08:43

+0

@Doug这就是它的工作原理。当解释为无符号整数值时,Hex $返回值。 – 2011-03-27 19:09:04