他们如何快速(记住)将十进制转换为十六进制?

Posted

技术标签:

【中文标题】他们如何快速(记住)将十进制转换为十六进制?【英文标题】:How do they convert Decimal to Hexadecimal so fast (in mind)? 【发布时间】:2011-05-16 16:48:42 【问题描述】:

我观察到很少有逆向工程师,他们将十进制转换为十六进制的速度非常快。这简直太棒了。我从来没有机会问他们。就个人而言,我真的很讨厌这种转换,而且我总是使用计算器进行转换。

我想知道这种转换是否有某种捷径?

我认为特别适合逆向工程师和低级(汇编、嵌入式)程序员。如果他可以用十六进制而不是十进制来计算、加法、减法和思考,那将是一个很大的优势。如果您对此有任何提示,请分享。

【问题讨论】:

如果你一直在做某事,最终你会做得越来越好 十进制转十六进制还是十六进制转十进制?后者更容易一些,只需在你的脑海中建立一个 16*digits 的表格。前者主要是记忆和缓存结果。 (事实上​​,随着时间的推移,他们会即时反汇编一些以十六进制编码的常用指令) @Mehradad Afshari:(In fact, over time, they disassemble some common instructions encoded in hex on the fly) 非常真实!我也见证了这一点。我完全震惊了! 试着记住你是如何在学校学习乘法表的。一开始很难。。都是一样的:共同的值是通过重复学习的,大的值是近似转换的。 【参考方案1】:

你需要知道 hart 的基本转换 0-16、0x0-0xF 和 0b0-0b1111 转换。

其余的你通过重复学习。以下是一些需要注意的经常重复的模式。

倍数:

1024(1K) 为 0x400 (1024*1024)1048567(1M) 为 0x100000 只需乘以 4 即可得到大小 4M 为 0x400000。

位位置类似,您可以学习十进制值

16 位字的 MSB 为 0x8000 或 32768 或 32K 因此下一位的值为 0x4000 或 16384 或 16K

这些模式到处重复,随着时间的推移你会开始学习它们。

如果您有二进制表示,则很容易将位分组为四个一组并快速转换为二进制表示。

找到十进制值 0xA1B587DE 的唯一现实方法是使用计算器(或者非常擅长数学)。但是从 0xA1B587DE 向下最近的 1k 边界是 0xA1B58400,如果您知道模式,这很容易。

来自您在操作码上的 cmets: 对于 RISC 处理器,大多数指令只是指令字中的前几位定义了指令系列(mov、jump 和、or、...),其余的只是参数。如果您使用处理器足够多,您将开始学习它们。

【讨论】:

100 十进制是 0x64,而 0x100 是 256 如果查看字节也很有用。你应该知道单个位是什么:0x80、0x40、0x20、0x10。否则,练习会让你变得更好。 那里也有小错误。 0x10000 是 64k,而不是 1Meg。那是0x100000,即。 5个零。虽然我倾向于将 0x1_0000 视为 64k,将 0x10_0000 视为 Meg。【参考方案2】:

一旦您了解了所涉及的编号系统的基础,这将非常简单。 十六进制是基数 16 - 所以,1(dec) = 0x01;但是 16(dec) = 0x10。

每当你看到一个十进制数字,比如 39:

除以 16 并取商 - 这是 2 (2*16 = 32) 余数是 7 ( 39 - 32 )

十进制 39 的 HEX 值因此为:0x27。

现在,将其转换回十进制:0x27 = 2*16 + 7 = 39 十进制:)

希望你明白了!

【讨论】:

【参考方案3】:

http://quashnick.net/geek_stuff/HEX2DEC.html

这是程序。休息是数学。如果您可以即时进行乘法和除法运算,则将十进制转换为十六进制应该没有问题,反之亦然。

【讨论】:

这是什么?您刚刚注册并回答了我的问题? 链接断开。请在此处粘贴答案

以上是关于他们如何快速(记住)将十进制转换为十六进制?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何将大的十六进制字符串转换为二进制

如何将证书转换为十进制模数和指数

excel表格如何将十六进制转换成浮点数

快速将字符串转换为二进制?

MATLAB里将十进制负小数转换成十六进制数

将十进制转换为二进制向量