0

搜索失败了,所以我直接问它有没有办法在 C# 中制作具有分离访问权限的 16 位 WORD?像 AX 和另一个常见的寄存器在 c++ 上就像

union unsigned short
{
    struct
    {
        char low,high;
    } parts;
    u16 whole;
} a;
#define ax a.whole
#define al a.parts.low
#define ah a.parts.high

而且我会像使用它一样

斧头=0x3d5f;啊=0x04;

等等。所以问题是 - 有没有办法在没有类\结构的情况下做到这一点,我不得不像使用它一样

AX.h=0x04

或那样。

4

2 回答 2

8

您需要使用 [StructLayout] 属性,指定 LayoutKind.Explicit,以便您可以直接控制字段的位置。然后对于每个字段,使用 [FieldOffset] 来控制其从结构开始的偏移量。喜欢:

using System.Runtime.InteropServices;
...

[StructLayout(LayoutKind.Explicit)]
struct X86Register {
   [FieldOffset(0)] public byte   reg8;    // Like AL
   [FieldOffset(1)] public byte   reg8h;   // Like AH
   [FieldOffset(0)] public ushort reg16;   // Like AX
   [FieldOffset(0)] public uint   reg32;   // Like EAX
   [FieldOffset(0)] public ulong  reg64;   // Like RAX
}
于 2013-05-24T00:21:49.083 回答
0

C# 是一种面向对象的语言。如果没有类或结构,就无法做任何事情。

使用一个类,它可以像这样实现:

public class A
{
    private byte[] raw;

    public A()
    {
        raw = new byte[2];
    }

    public byte Low
    {
        get
        {
            return raw[0];
        }
        set
        {
            raw[0] = value;
        }
    }

    public byte High
    {
        get
        {
            return raw[1];
        }
        set
        {
            raw[1] = value;
        }
    }
}
于 2013-05-24T00:23:11.923 回答