110,533
社区成员
发帖
与我相关
我的任务
分享
// 结构成员都是Blittable,dummy们是占位的傀儡
[StructLayout(LayoutKind.Sequential)]
public struct RESULT
{
public int dummy1, dummy2, dummy3; //申请到12字节内存,用于接收char[10] a
public int b; //申请4字节内存,对应long b
public string a //属性a,对应char[10] a,用于外部使用
{
get
{
//外部访问此string a时,把3个dummy里面存储的数据转换为c#里面的string
List<byte> bytes = new List<byte>(); //用于临时存储转换过程中的数据
bytes.AddRange( BitConverter.GetBytes(dummy1) ); //把dummy1按字节存入bytes,下同
bytes.AddRange( BitConverter.GetBytes(dummy2) );
bytes.AddRange( BitConverter.GetBytes(dummy3) );
//把bytes按ASCII码转为字符串并返回
//注意bytes.IndexOf(0)这里的意思是如果字节中有0即'\0',则表示字符串已结束
//这里不太严谨,假设了你的char[10]是作为字符串用的,如果你不是这样子(没'\0'),需要自行处理
return Encoding.ASCII.GetString(bytes.ToArray(), 0, bytes.IndexOf(0));
}
}
}
// 结构成员都是Blittable,dummy们是占位的傀儡
[StructLayout(LayoutKind.Sequential)]
public struct RESULT
{
public int dummy1, dummy2, dummy3;
public int b;
public string a
{
get
{
List<byte> bytes = new List<byte>();
bytes.AddRange( BitConverter.GetBytes(dummy1) );
bytes.AddRange( BitConverter.GetBytes(dummy2) );
bytes.AddRange( BitConverter.GetBytes(dummy3) );
return Encoding.ASCII.GetString(bytes.ToArray(), 0, bytes.IndexOf(0));
}
}
}