【问题标题】:Dword conversion to dec in little endianDword 转换为 little endian 中的 dec
【发布时间】:2019-06-10 13:16:10
【问题描述】:

Dword x 作为一系列字节 123、29 保存到内存中。使用 little endian 的十进制系统中 x 的值是多少?

这个问题的答案是7547

有人可以一步一步地向我解释吗?我已经知道小端颠倒了顺序,但这并没有给出这个答案。我试图转换到另一个系统,但它仍然给我错误的答案。

【问题讨论】:

  • 7547 (decimal) in little endian DWORD 是 7B 1D 00 00,而不仅仅是 7B 1D (123 29)。在大端,它是 00 00 1D 7B。您会看到相同字节值的不同顺序。
  • 一个双字在 x86 上是 4 个字节,而不是 2 个。除非你在一个“字”= 1 个字节的假设架构上?在大多数非 x86 ISA 的术语中,“字”是 32 位,而 dword 是 64 位,所以这对其他任何东西也没有意义。也许您的意思是“word”而不是“dword”?
  • 无需转换为十六进制并返回。 123 + 29*256 = 7547

标签: assembly decimal endianness dword


【解决方案1】:

我想给你一个卡斯帕回答的替代解释:

在十进制系统中,您可以在每个数字中“存储”从 0 到 9 的值。要存储更大的数字,请使用多个数字。写成“1234”的数字的值是这样计算的:

1234 = 4 + 3*10 + 2*10*10 + 1*10*10*10

使用字节,您可以在每个数字中存储 0 到 255 的值。就像在十进制系统中一样,您可以使用多个字节来存储更大的值:

4、3、2、1 = 4 + 3*256 + 2*256*256 + 1*256*256*256

123, 29 = 123 + 29*256 = 7547

("Little endian" 表示最小字节首先存储在内存中;就像您从右到左读取十进制数一样。)

【讨论】:

    【解决方案2】:

    当您在谈论 DWORD 并转换为小端时,我假设您在输入中有一个 32 位值的大端编码。

    1. 让我们转换 [123 | 29 | 00 | 00] 到十六进制:[7B |一维 | 00 | 00] => 十进制表示是2065498112

    2. 让我们反转:[00 | 00 |一维 | 7B] => 十进制表示是7547

    【讨论】:

    • 问题中没有提到大端或十六进制。在这里使用它们只会增加混乱。
    猜你喜欢
    • 2022-06-10
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多