C#序列化结构体
2024-08-29 12:22:04
在将对象或结构体序列化成二进制数据流时,我们通常都会使用 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++中, 使用联合体作为结构体成员,该如果实现.
如果有人知道,请留言告知,谢谢!
最新文章
- sql 代码笔记
- 编译器--__attribute__ ((packed))
- [原创]Oracle 12c 抢先安装手迹
- 几个功能强大的系统源码(机票分销、机票预订、OA、手机充值、wifi营销、网络超市、体检平台)
- 2016年12月11日 php面向对象
- codeforces 719E E. Sasha and Array(线段树)
- C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)
- Android中使用WebView与JS交互全解析
- Swift - iOS中各种视图控制器(View Controller)的介绍
- 【nodejs之我的开源module】 使用express搭建web服务器,代码即文档的实现。
- (1)xcode基本设置和控制器等介绍
- JSON创建键值对(key是中文或者数字)方式详解
- 老大哥在看着你!我国部署超2000万个AI监控系统
- QuickBI助你成为分析师——计算字段功能
- ssh网上商城源码
- 搭建rsync服务并同步重要数据
- LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium
- android-基础编程-Preference
- .Net使用163smtp发送邮件时错误:邮箱不可用. has no permission解决方法
- 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令
热门文章
- html颜色设定 - 网址不见了看这里
- 编译 ambari 2.7.3
- [CQOI2012][bzoj2668] 交换棋子 [费用流]
- Django 自定义模板标签 报错django.template.exceptions.TemplateSyntaxError: &#39;####&#39; is not a registered tag library. Must be one of:
- P4768 [NOI2018]归程
- 数据结构11: 栈(Stack)的概念和应用及C语言实现
- LUNA16数据集(一)简介
- 停止mysql服务
- mysql5.7脚本日常使用
- c语言字符函数