【问题标题】:Converting little-endian to ASCII将 little-endian 转换为 ASCII
【发布时间】:2017-08-26 21:24:42
【问题描述】:

我需要帮助转换小端字符串

8989d0261ee17bbf95ea5596711538b0

转为 ASCII。有人可以指导我完成这个过程吗?

我不确定这是否正确,但我相信我可以通过以下方式将此字符串转换为十进制:

8 * 16^(字符串长度) + 9 * 16^(字符串长度 - 1) + ... + 0 * 16^0

(将字符串的值乘以它的位置)。然后一旦我得到它,我减去 2^32,我将得到十进制的等价物。然后,我可以使用在线转换器将十进制数转换为 ASCII。这行得通吗?

【问题讨论】:

  • 我遵循“将字符串的值乘以它的位置”部分,但在那之后,我迷路了。我们很乐意提供帮助。请edit 提供示例或扩展说明。另外,如果适用,请使用编程语言进行标记。
  • 我想我应该减去 2^32,因为这是我记得在网上某处读到的内容。我不应该这样做吗?
  • 我猜这与将无符号整数转换为 2 的补码有符号整数有关。由于应该是 2^128 的位数。但我仍然没有关注。

标签: string hex ascii endianness


【解决方案1】:

你的推理是正确的。

如果你有一个数字,比如 259,以 10 为底,这个数字可以重写为

2 * 10^2 + 5 * 10^1 + 9 * 10^0。

同样,在上面的示例中,字符串中的每个字符都被分配了一个值(类似于十六进制)。我看到您的方程式中的转换部分是正确的。 二进制补码是对二进制数的运算,用于表示有符号数。按照这种方法,我们必须减去 2^32 才能获得十进制的等效值。

请注意,也可以执行类似的反向操作来实现 ASCII 表示(以防您无法使用转换器)。

这是一个包含许多示例的链接,您可能会感兴趣:https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多