【问题标题】:Converting numbers to ASCII in assembly在汇编中将数字转换为 ASCII
【发布时间】:2012-10-05 20:59:08
【问题描述】:

有人能解释一下为什么对以 0x0030 作为操作数的二进制数进行 OR 运算会产生该数字的 ASCII 字符吗?

【问题讨论】:

  • 我明白为什么减去 0x0030 有效。

标签: assembly binary hex ascii bit-manipulation


【解决方案1】:

因为查看 ASCII 图表,数字 0 到 9 从 0x30 开始。所以你想要字符 1 的 ASCII 值吗? 0x30 或 0x01 = 0x31 = 数字 1 的 ASCII 值。

In binary it's easy to see:

(0x30)   110000
or
(0x01)   000001
=        110001

Which is 0x31 - ASCII value of 1.

【讨论】:

  • 嗯,在将信号数字转换为 ASCII 等效值的上下文中,它肯定是最有意义的。
【解决方案2】:

如果您指的是数字 0 到 9,原因是 0x30(或 48)是数字 0 的 ASCII 码。因为 48 只需要一个字节的高位(左手)位, 与任何低于 16 的数字(低位)进行或运算与在数学上添加数字相同。

所以 0x30 OR 0x01 将给出 0x31,即字符 '1' 的 ASCII 码,以此类推。

【讨论】:

    【解决方案3】:

    查看单个数字的二进制表示:例如2d = 00000010b。对其应用 0x30 (00110000b) 的 OR 操作。这导致 00110010b 是 0x32 或 50d,这是 '2' 的 ASCII 码。实际上,在这种情况下(因为没有进位要考虑),OR 操作等于添加 0x30。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2014-05-06
      • 2016-07-31
      • 1970-01-01
      • 2016-10-16
      • 2011-10-03
      相关资源
      最近更新 更多