他们如何快速(记住)将十进制转换为十六进制?
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
这是程序。休息是数学。如果您可以即时进行乘法和除法运算,则将十进制转换为十六进制应该没有问题,反之亦然。
【讨论】:
这是什么?您刚刚注册并回答了我的问题? 链接断开。请在此处粘贴答案以上是关于他们如何快速(记住)将十进制转换为十六进制?的主要内容,如果未能解决你的问题,请参考以下文章