计算十六进制偏移量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算十六进制偏移量相关的知识,希望对你有一定的参考价值。

目前我正在研究一个简单的二进制查看器(十六进制查看器),它打开二进制文件并将代码输出为十六进制值。我还想创建一个偏移量,显示每行中第一个十六进制值的位置。偏移量当然也应该是十六进制格式。现在我遇到的问题是我不知道如何在偏移量中添加零,以及需要添加多少。它应该是这样的:

enter image description here

您可以看到偏移量在开头有一些零。我想计算我需要添加多少零以及如何执行此操作。

答案

添加'0'表示填充正确吗?

你可以通过使用string.Pad实现这一目标

uint offset = 0x0000000F;
string offsetPadded = offset.ToString("X").PadLeft(8,'0'); // The 'X' formats to hex

结果字符串应该是"0000000F"

零的数量通常为8或16(32-64位)。如果要支持大于4GB的文件,则应使用16个零(64位)

另一答案

如果你想知道数字中需要0的数量,你可以使用string

首先,将数字格式化为十六进制,ToString("X")将适用于它。

得到它的Length并将其减去你的目标长度,如8。

 int zeroCount = 8 - i.ToString("X").Length;

别忘了检查zeroCount不是否定的。 zeroCount = Math.Max(0, zeroCount);将确保它。

此外,如果需要确定行号的最大宽度而不是硬编码8,它也可以使用string来完成。

使用ToString("X")获取最大行号,该行号与行数和格式相同。得到它的Length。然后它将是行号的最大长度。

以上是关于计算十六进制偏移量的主要内容,如果未能解决你的问题,请参考以下文章

(操作系统)计算页码和页偏移量

Solr 高亮是不是还可以指示返回的片段在原始字段中的位置或偏移量?

C 语言结构体 ( 结构体偏移量计算 | 代码示例 )

Parceable 错误:在偏移量 1112 处解组未知类型代码 7274595

通过阅读 .hex 和 .map,我如何确定 BL 链接到正确的函数偏移量?

浮点数