将小端转换为十进制?

时间:2016-04-27 18:03:43

标签: assembly

有人可以解释如何从小端的四字节序列中获取整数吗?

我理解我们如何从0x8A 0x8B 0x8C 0x57获得1468828554(32位有符号整数),因为我们只是将578C8B8A转换为整数,但我们如何得到以下内容?

  

0x8B 0x6A 0x73 0x86 = -2039256437(32位有符号整数)
  0xAB 0x3A 0x7C 0x96 = -1770243413(32位有符号整数)
  0x22 0x88 0x8A 0x56 = 1451919394(32位无符号整数)

1 个答案:

答案 0 :(得分:0)

转换价值有多种方法。这是一个,它将被显示为相当于减去2 ^ 32(这是一个大于最大值的位置,31,因此给出2s补码或反转位。如果你翻转每个位,你还需要加1你正在做相当于10的基数,将10,000转换成9999来翻转每一位。)

STEPS

  1. 每个字节与其位置值的顺序相反,因此翻转字节:86 73 6A 8B
  2. 检查MSB(最高有效位)是1还是0,这里因为8大于或等于1000(二进制),所以它是负数。因此,您必须翻转每一位,这可以通过从15:79 8(12)95 74减去每个十六进制位置来完成。
  3. 现在通过将每个16的幂乘以位值来转换为十进制:7 * 16 ^ 7 + 9 * 16 ^ 6 + 8 * 16 ^ 5 + 12 * 16 ^ 4 + 9 * 16 ^ 3 + 5 * 16 ^ 2 + 7 * 16 + 4 + 1
  4. 你现在基础10中有-2,039,256,437
  5. 这与(8 * 16 ^ 7 + 6 * 16 ^ 6 + 7 * 16 ^ 5 + 3 * 16 ^ 4 + 6 * 16 ^ 3 + 10 * 16 ^ 2 + 8 * 16 + 11相同) - 2 ^ 32