首页 > 其他分享 >【代码块】-结构体序列化与反序列化

【代码块】-结构体序列化与反序列化

时间:2023-12-20 21:57:55浏览次数:35  
标签:int 代码 public 结构 byte 序列化 Marshal size

整理代码块

代码块整理后存储,供后期使用

结构体序列化与反序列化

using System;
using System.Runtime.InteropServices;
using System.Text;

namespace structTest
{
    /// <summary>
    /// 结构体序列化
    /// </summary>
    public class structSerializable
    {
        //Structure转为byte数组,实现了序列化 
        public byte[] StructToBytes(object structure)
        {
            int size = Marshal.SizeOf(structure);
            //unsafe
            //{
            // size = sizeof(new MyStruct);
            //}
            //Console.WriteLine(size);
            IntPtr buffer = Marshal.AllocHGlobal(size);
            try
            {
                Marshal.StructureToPtr(structure, buffer, false);
                byte[] bytes = new byte[size];
                Marshal.Copy(buffer, bytes, 0, size);
                return bytes;
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }
        //byte数组转为Structure,实现了反序列化 
        public object BytesToStruct(byte[] bytes, Type strcutType)
        {
            int size = Marshal.SizeOf(strcutType);
            IntPtr buffer = Marshal.AllocHGlobal(size);
            try
            {
                Marshal.Copy(bytes, 0, buffer, size);
                return Marshal.PtrToStructure(buffer, strcutType);
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }
        public struct MyStruct
        {
            public byte[] _int;
            public byte[] _long;
            public byte[] _byte;
            //public float _float;
        }
        public void strcut()
        {
            byte[] Mybate = Encoding.ASCII.GetBytes("xiaLuoTest1234567890");
            byte[] Mybate1 = Encoding.ASCII.GetBytes("zhangsan");
            byte[] Mybate2 = Encoding.ASCII.GetBytes("lisi");

            MyStruct ms = new MyStruct();// size:24
            ms._int = Mybate;
            ms._long = Mybate1;
            ms._byte = Mybate2;
            //ms._float = 1.2f;

            //object getRtn = BytesToStruct(Mybate, ms.GetType());
            byte[] getbyte = StructToBytes(ms);

            //Console.WriteLine("define : _float:{0} _int:{1} \r\n", ms._int, ms._long = 123456);
            //Console.WriteLine("BytesToStruct: \r\n_float:{0} _int:{1} ", ((MyStruct)getRtn)._int, ((MyStruct)getRtn)._long);
            int i = 0;
            foreach (byte item in getbyte)
            {
                Console.WriteLine(i + " : " + item);
                i++;
            }
            Console.ReadKey();
        }
    }
}

标签:int,代码,public,结构,byte,序列化,Marshal,size
From: https://www.cnblogs.com/Katakana/p/17917670.html

相关文章

  • 【代码块】-winform 获取控件属性和事件、自定义控件的自定义方法
    整理代码块代码块整理后存储,供后期使用C#获取属性,获取事件逻辑Controlcontrol=Controls.Find("button1",true)[0];//获取属性objecto=control.GetType().GetProperty("PropertyName").GetValue(control,null);//获取事件System.Reflection.EventInfoev=contr......
  • 【代码块】-计算机蜂鸣
    整理代码块代码块整理后存储,供后期使用计算机蜂鸣classProgram{staticvoidMain(string[]args){while(true){Console.WriteLine("pleasepressnum\"1\"or\"2\"");intnum=Convert.ToInt32(Console.ReadLine());......
  • 金牌导航-数据结构优化DP
    数据结构优化DP例题A题解设\(f_{i,j}\)表示以第\(i\)位为结尾,长度为\(j\)的严格单调上升子序列的数量。那么显然有\(f_{i,j}=\sum_{k=1}^{i-1}f_{k,j-1}\times(a_k<a_i)\)然后发现这玩应\(O(n^2m)\)直接寄掉了。考虑优化。发现只有当\(a_k<a_i\)时才会有贡献。......
  • c# - 如何在自定义 System.Text.Json JsonConverter 中使用默认序列化?
    我正在写一个 custom System.Text.Json.JsonConverter 将旧数据模型升级到新版本。我已覆盖 Read()并实现了必要的后处理。但是,我根本不需要在 Write() 中做任何自定义操作。方法。如果我根本没有转换器,如何自动生成默认序列化?显然我可以使用不同的 JsonSerializerOption......
  • 阅读笔记:《代码大全》阅读笔记十一
    当谈到软件开发的艺术和科学时,SteveMcConnell的《代码大全》是无可争议的经典之作。它是一本旨在为软件工程师和程序员提供深入洞察的指南,旨在帮助他们提升编程技能、编写高质量代码以及有效管理整个软件开发周期。这本书不仅提供了广泛的理论知识,还结合了大量实用的案例和建议,下......
  • VSCode下载.NET出错以及没有代码提示的解决办法
    Failedtodownload.NET7.0.14~x64:.NETinstallationtimedout.Youmayneedtochangethetimeouttimeifyouhaveaslowconnectionvscode安装Unity插件后提示下载.NET出错 解决办法是下载它提示的SDK手动安装,比如提示7.0.14,那么就去下载对应的SDK 安装之......
  • python代码实现保存微博文娱榜的数据Ajax异步加载
    最近有小伙伴看完蜜蜂之前分享的爬虫文章之后,使用python代码实现了自动保存网站上面的图片到本地,但是最近又有新的需求。需求描述:爬取微博文娱榜的数据,并保存到csv文件中网址:https://weibo.com/hot/entertainment需要将一下框上的两个字段都爬取下来。对于这样的需求,看过蜜蜂之前......
  • JS压缩谁最强?对比5款JS代码压缩工具
    JS压缩谁最强?对比5款JS代码压缩工具JS压缩,似乎是很简单的一个事情,通常在线就可以完成。但不同网站或工具提供的JS压缩,效果差异不小。本文,测试国内外5个JS在线压缩工具,看看谁的效果最好。测试用JS代码(注:这段代码来下面要测试的JShaman网站,以压缩这段代码为例,看不同的工具压缩后......
  • Mysql以及TCP socket的C++代码
    在使用socket编写tcp的C++程序时,遇到了一个问题:那就bind冲突了,分析原因:是因为std中有bind函数,而socket中也有,但是没有报重复定义的错误,这就有一点难办了。百度了一下:发现只要使用::bind就可以调用socket的bind。下面把这个套接字socket的server端代码贴出来:staticvoid*serv......
  • SpringBoot代码混淆与反混淆加密工具详解
    ​ SpringBoot代码混淆与反混淆加密工具详解简单就是把代码跑一哈,然后我们的代码.java文件就被编译成了.class文件   ​反编译就是针对编译生成的jar/war包里面的.class文件逆向还原回来,可以看到你的代码写的啥。比较常用的反编译工具JD-GUI,直接把编译......