【问题标题】:Understanding Endianess了解字节顺序
【发布时间】:2012-06-09 00:36:06
【问题描述】:

我正在用 C# 编写一个堆栈类,其行为类似于 x86 堆栈(字填充、推送和弹出不同大小“对象”的能力等)

如果我打电话给Push<int>(0x01234567),下面的 ASCII 艺术描述了应该发生的事情。这是大端还是小端。

| 0x01 | 0x23 | 0x45 | 0x67 |  ---- Low Address  (New  top)
   |      |      |      \----> 0x67
   |      |      \-----------> 0x45
   |      \------------------> 0x23
   \-------------------------> 0x01
                               ---- High Address (Orig top)

【问题讨论】:

  • 你看过维基百科上的大端和小端吗?如果你有,你早就知道答案了。
  • @TonyTheLion 是的,我有。我仍然对它如何与堆栈一起使用感到困惑。
  • 您的图片并没有太大帮助,因为我们无法分辨出任何一个框的内存中的高地址和低地址 :)
  • @500-InternalServerError 更新图像

标签: c# stack endianness


【解决方案1】:

最低有效字节(0x67)在最低地址,所以小端。

【讨论】:

    【解决方案2】:

    这些是int 值的各个字节,还是只是以块的形式显示int 的十六进制表示的一种奇怪方式?因为在 little-endian 中,最低有效字节具有最低的内存地址,即它在内存中字节的原始十六进制视图中排在第一位。但是,在您的堆栈上,第一个字节存储在最高地址中,那么这将是大端。

    【讨论】:

    • 这些是单独的字节值
    • 好的,在这种情况下,值 0x01234567 应该写为字节 0x67 0x45 0x23 0x01,因为这是英特尔系统内存中字节的顺序。不过,您的堆栈中的字节顺序是正确的。
    • 如果您推入 0x01234567,则图像中的堆栈是小端序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2020-11-02
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多