18910140161

解决C#结构阵列之间的转换

顺晟科技

2021-08-28 09:39:50

226

解决C#核心阵列之间转换问题的由来:写入C#TCP通信程序时,如果在发送数据时与VC6.0等程序通信,则大部分是传输结构,在VC6.0中可以轻松地将char[]阵列转换为结构,但不能在C#中直接转换byte

(1)解决C#核心阵列之间转换的定义核心:

//名称空间

using system . runtime . interop services;

//此属性不可缺少

[StructLayoutAttribute(

LayoutKind。Sequential,

CharSet=CharSet。Ansi,Pack=1)]

结构TestStruct

.{

public int c;

//字符串,SizeConst是字符串的* * *长度

[marshalas(unmanagedtype . byvaltstr,size const=256)]

公共字串str

//int数组,SizeConst表示转换为

使用//byte阵列之前,必须先初始化阵列

//的数组长度必须与SizeConst匹配。例如:test=new int[6];

[marshalas(unmanagedtype . byvalarray,size const=6)]

Publicint []测试;

}

(2)解决C#核心阵列之间转换的byte阵列旋转核心3360

/* *///摘要

///byte阵列旋转结构

////摘要

//param name='bytes'byte阵列/param

//param name='type '核心类型/param

//returns转换后的核心/returns

公共静态对象bytestostuct (byte [] bytes,type type)

.{

//获得结构的大小

Intsize=marshal.sizeof(类型);

//byte阵列长度小于核心尺寸

If(大小字节)。Length)

.{

//返回null

Return null

}

//核心大小的内存空间分配

intptr struct ptr=marshal . all och global(size);

将//byte阵列复制到配置的记忆体空间

Marshal.copy (bytes,0,structptr,size);

//将内存空间转换为目标结构

objectobj=marshal . ptrto structure(struct ptr,type);

//释放内存空间

Marshal。Freehglobal(struct ptr);

//返回结构

Return obj

}

希望解决C#核心阵列之间转换的相关内容有助于学习和理解C#核心阵列之间的转换方法。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航