C# 结构体转byte数组 结构体转byte[] 结构体、byte数组互转

VS-C++ 系列:所有相关C++文章链接.
VS-C# 系列:所有相关C#文章链接.
bat 系列:所有相关bat文章链接.
OpenCV 系列:所有相关OpenCV文章链接.


Keil 系列:所有相关文章链接
所有内容均以最小系统调试成功;逐步提供低分源码工程下载
保证每行代码都经过验证!
如有疑惑,欢迎留言,看见即回;祝好__by Dxg_LC

序言:
1、以上链接为方便整理查看资料用;伴随博文发布更新,如果有不正确处,感谢指正
2、因本人能力有限若有不正确之处或者相关超链接失效,请于相关文章内提醒@博主;灰常感谢
3、友情提醒1,勿要《一支烟 + 一杯茶 == 一坐一下午》 身体重要,革命本钱;
4、友情提醒2,多喝热水;
5、友情提醒3,听媳妇话+多点时间陪家人;
在这里插入图片描述

1、

[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]
struct TestStruct
{
    public int a;
    
    public int b;
    
    public int c;    
    
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
    public string str;
    
	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 25)]
    public int[] ArrByte;
    
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public int[] ArrInt;
}
 <summary>
/// 结构体转byte数组
/// </summary>
/// <param name="structObj">要转换的结构体</param>
/// <returns>转换后的byte数组</returns>
public static byte[] StructToBytes(object structObj)
{
    int size = Marshal.SizeOf(structObj);
    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;
}
/// <summary>
/// byte数组转结构体
/// </summary>
/// <param name="bytes">byte数组</param>
/// <param name="type">结构体类型</param>
/// <returns>转换后的结构体</returns>
public static object BytesToStuct(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;
}

Dxg-原创出品,如需转载,请注明出处;

欢迎收藏,点赞;"一键三联"走起,LOL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘气坏坏besos

原创干货分析,欢迎大佬打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值