将负十进制数转换为十六进制

mos*_*r67 2 excel hex programming-languages

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

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

正数似乎被正确转换,而负数让我头疼,因为与我想要的结果相比,Excel 在 HEX 的 beinning 中添加了两个额外的字母(两个 FF)。

示例:十进制输入:-524288

我必须获得正确的十六进制输出:FFF80000

在 Excel 中使用公式我得到:FFFFF80000(在十六进制输出的开头我得到了 2 FF)

另一个例子:

十进制输入:-29446758

应该是FE3EAD9A

但在 Excel 中我得到 FFFE3EAD9A

似乎我总是在十六进制输出中获得 2 个额外的 FF。

有人可以(以简单的方式)解释为什么我会得到 2 个额外的 FF 以及我是否可以安全地移除它们?

Dr.*_*ius 5

在 Excel 中,=DEC2HEX默认情况下返回 10 个字符。

如果您只想获得 8,请按照您的问题建议使用:

=DEC2HEX(A1,8)
Run Code Online (Sandbox Code Playgroud)

尽管如此,除非您有兼容性问题,否则您可以保留默认数字。请记住,“F”字符用作负数作为填充字符(与“0”用于正数的方式相同)。

编辑

正如您在评论中所述,上述内容对于负面影响是失败的。

以下工作:

=RIGHT(DEC2HEX(A1),8)
Run Code Online (Sandbox Code Playgroud)