DELPHI转C#问题
在DELPHI中,代码如下://one card
TCardNumber = packed record
case Integer of
0:(dwCardNo : Cardinal); //Decimal:Card No.
1:(wCardID,wCardZn : Word); //Wiegand : Card Offset,Card Sector
2:(Byte : array[1..3] of byte);
end;
把上面这段转到C#里面该如何做?
关键是 TCardNumber = packed record 这个在C#里面怎么定义?
请大家帮帮我。谢谢 --------------------编程问答-------------------- 不熟悉Delphi,不过如果想转化为C#,就必须先知道packed record是什么样的数据或者类。
楼主能说明一下么? --------------------编程问答-------------------- 就是结构体了
你还需要手工对齐。 --------------------编程问答--------------------
定义一个(有限的)“万能”类型。或者叫共用体,这个共用体由dwCardNo、wCardID+wCardZn、Byte[4]共用同一内存,以其中占用空间最大的部分确定为该结构的内存空间大小,并以首地址对齐. --------------------编程问答--------------------
定义一个(有限的)“万能”类型。或者叫共用体,这个共用体由dwCardNo、wCardID+wCardZn、Byte[4]共用同一内存,以其中占用空间最大的部分确定为该结构的内存空间大小,并以首地址对齐. --------------------编程问答-------------------- 你说的共用体,有点想c的联合。 --------------------编程问答--------------------
--------------------编程问答--------------------
[StructLayout(LayoutKind.Explicit, Size=8)]
struct TCardNumber
{
[FieldOffset(0)]
public int dwCardNo;
[FieldOffset(0)]
public int wCardID;
[FieldOffset(4)]
public int wCardID;
[FieldOffset(0)]
public unsafe byte[4] bytes;
}
按照你这样操作 出现
“其他信息: 未能从程序集 DPU3001EG, Version=1.0.2988.29926, Culture=neutral, PublicKeyToken=null 中加载类型 DPU3001EG.TCardNumber,因为它在 0 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠。”
--------------------编程问答--------------------
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit, Size=8)]
unsafe struct TCardNumber
{
[System.Runtime.InteropServices.FieldOffset(0)]
public int dwCardNo;
[System.Runtime.InteropServices.FieldOffset(0)]
public int wCardID;
[System.Runtime.InteropServices.FieldOffset(4)]
public int wCardZn;
[System.Runtime.InteropServices.FieldOffset(0)]
public fixed byte bytes[4];
}
之前那段代码我没测,这段代码我测过是编译通过的. --------------------编程问答-------------------- “DPU3001.cs(32): 不安全代码只会在使用 /unsafe 编译的情况下出现”
是不是在VS2003中不可以用? --------------------编程问答-------------------- public fixed byte bytes[4];
在2003中语法错误 --------------------编程问答--------------------
不安全代码默认是不允许的,你要把它打开.
补充:.NET技术 , C#