在某些使用了 readonly 关键字的情况下,C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下来了,但仍然值得重新审视,因为它与C# 7.2 的几个特性有关。in 和ref r
顺晟科技
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#核心阵列之间的转换方法。
28
2021-08
28
2021-08
16
2021-06
16
2021-06
16
2021-06
16
2021-06