2017-04-01 75 views
1

我需要帮助转换little-endian的字符串小端转换为ASCII

8989d0261ee17bbf95ea5596711538b0 

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

我不知道这是否是正确的,但我相信,我可以在这个字符串转换成十进制做:

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

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

+0

我遵循“由它的位置的字符串值乘以”的一部分,但在那之后,我迷路了。我们很乐意提供帮助。请用一个例子或扩展的解释[编辑]。另外,如果适用,请使用编程语言进行标记。 –

+0

我想我应该减去2^32,因为这是我记得在网上某处阅读的内容。我不应该这样做吗? – stackofhay42

+0

我猜这与将无符号整数转换为2的补码有符号整数有关。由于应该是2^128的位数。但我仍然没有跟随。 –

回答

0

你的推理是正确的。

如果有一个数字,表示259,在基座10的数目可以被改写为

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

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

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

这里是有很多的例子,这可能是您感兴趣的链接:https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html