• C#序列化结构体


    在将对象或结构体序列化成二进制数据流时,我们通常都会使用 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类来实现,

    但是这种方式会把对象或结构体的类型信息给序列化到数据流中, 在做通迅时,这种方式是不可取的.

    在c/c++中,通常对某个协议使用 struct 进行存储,然后将其序列化, c#也能实现这样的功能. 具体的实现办法:

    public static byte[] GetBytes<TStruct>(TStruct data) where TStruct : struct
    {
        int structSize = Marshal.SizeOf(typeof(TStruct));
        byte[] buffer = new byte[structSize];
        GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
        Marshal.StructureToPtr(data, handle.AddrOfPinnedObject(), false);
        handle.Free();
        return buffer;
    }
    

    作为参数的结构体,需要使用 [StructLayout] 和 [FieldOffset]分别声明结构体和结构体中的成员.通过上面的方法,可以将结构体中的成员序列化成

    我们需要的二进制数据流. 大部分的需求都可以实现, 但目前,我还不太清楚,如果需要实现类似于c/c++中, 使用联合体作为结构体成员,该如果实现.

    如果有人知道,请留言告知,谢谢!

      

  • 相关阅读:
    yum 源配置
    RHCE学习笔记 管理1 (第六章 第七章)
    阿里云ecs(phpstudy一件包)
    PHP第三方登录 -- 微博登录
    php 实现qq第三方登录
    Linux 搭建svn服务器
    Linux vi编辑器的基本命令
    Mysql 导出导入
    svn服务配置和日常维护命令
    Eclipse导入idea 项目
  • 原文地址:https://www.cnblogs.com/prolove2/p/3563822.html
Copyright © 2020-2023  润新知