搜索失败了,所以我直接问它 在C#中有没有办法让16bit 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
而且我会像
一样使用它AX = 0x3d5f; 啊= 0×04;
等。所以问题是 - 有没有任何方法可以做到这一点没有类\结构,我喜欢使用它
AX.h = 0×04
或者那样。
答案 0 :(得分: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
}
答案 1 :(得分: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;
}
}
}