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

时间:2010-11-27 21:59:37

标签: assembly embedded hex

我观察到很少有逆向工程师,他们将十进制十进制转换为十六进制。这真是太神奇了。我没机会问他们。就个人而言,我真的很喜欢这种转换,我总是使用计算器进行转换。

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

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

3 个答案:

答案 0 :(得分:6)

你需要知道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,如果您知道模式,这很容易。

根据您对操作码的评论:
对于RISC处理器,大多数指令只是指令字中的前几位定义了指令族(mov,jump和,或......),其余的只是参数。如果你使用足够的处理器,你将开始学习它们。

答案 1 :(得分:3)

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

每当看到十进制数字时,比方说39:

除以16然后取公数 - 这是2(2 * 16 = 32) 余数是7(39 - 32)

十进制39的十六进制值因此是:0x27。

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

希望你明白了!

答案 2 :(得分:2)

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

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