时间:2021-05-20
最近在使用结构体与字节数组转化来实现socket间数据传输。现在开始整理一下。对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Runtime.InteropServices;namespace FileSendClient{ [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] struct StructDemo { public byte a; public byte c; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] b; public byte d; public int e; } unsafe class Program { static void Main(string[] args) { StructDemo sd; sd.a = 0; sd.d = 0; sd.c = 0; sd.b = new byte[3] { 0, 0, 1 }; sd.e = 5; int size = 0; //此处使用非安全代码来获取到StructDemo的值 unsafe { size = Marshal.SizeOf(sd); } byte[] b = StructToBytes(sd,size); ByteToStruct(b, typeof(StructDemo)); } //将Byte转换为结构体类型 public static byte[] StructToBytes(object structObj,int size) { StructDemo sd; int num = 2; byte[] bytes = new byte[size]; IntPtr structPtr = Marshal.AllocHGlobal(size); //将结构体拷到分配好的内存空间 Marshal.StructureToPtr(structObj, structPtr, false); //从内存空间拷贝到byte 数组 Marshal.Copy(structPtr, bytes, 0, size); //释放内存空间 Marshal.FreeHGlobal(structPtr); return bytes; } //将Byte转换为结构体类型 public static object ByteToStruct(byte[] bytes, Type type) { int size = Marshal.SizeOf(type); if (size > bytes.Length) { return null; } //分配结构体内存空间 IntPtr structPtr = Marshal.AllocHGlobal(size); //将byte数组拷贝到分配好的内存空间 Marshal.Copy(bytes, 0, structPtr, size); //将内存空间转换为目标结构体 object obj = Marshal.PtrToStructure(structPtr, type); //释放内存空间 Marshal.FreeHGlobal(structPtr); return obj; } }}声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换;由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型
本文实例讲述了C#将字节数组转换成数字的方法。分享给大家供大家参考。具体实现方法如下://Createadecimalfromabytearraypublics
本文实例讲述了C#实现字符串转换成字节数组的简单实现方法。分享给大家供大家参考。具体实现方法如下:usingSystem.Text;publicstaticby
本文实例讲述了C#将数字转换成字节数组的方法。分享给大家供大家参考。具体实现方法如下:下面的代码用到了MemoryStream和BinaryWriter//Cr
PowerShell中,如果需要可以创建字节数组,即传说中的Byte[]类型的数组。当然,它属于强类型的数组。使用如下语句创建一个字节数组,数组元素的个数为10