zoukankan
html css js c++ java
从struct到byte[]之RawFormatter
public
partial
class
Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
Demo d
=
new
Demo();
d.a
=
5
;
d.b
=
10
;
d.c
=
new
byte
[]
{
1
,
2
,
3
}
;
d.s
=
"
123
"
;
byte
[] buf
=
RawFormatter.RawSerialize(d);
MessageBox.Show(
"
aaa
"
);
}
}
[StructLayout(LayoutKind.Sequential,Pack
=
1
,CharSet
=
CharSet.Ansi)]
struct
Demo
{
public
byte
a;
public
int
b;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
3
)]
public
byte
[] c;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
=
5
)]
public
string
s;
}
public
class
RawFormatter
{
public
static
byte
[] RawSerialize(
object
anything)
{
int
rawsize
=
Marshal.SizeOf(anything);
IntPtr buffer
=
Marshal.AllocHGlobal(rawsize);
Marshal.StructureToPtr(anything, buffer,
false
);
byte
[] rawdatas
=
new
byte
[rawsize];
Marshal.Copy(buffer, rawdatas,
0
, rawsize);
Marshal.FreeHGlobal(buffer);
return
rawdatas;
}
public
static
object
RawDeserialize(
byte
[] rawdatas, Type anytype)
{
int
rawsize
=
Marshal.SizeOf(anytype);
if
(rawsize
>
rawdatas.Length)
return
null
;
IntPtr buffer
=
Marshal.AllocHGlobal(rawsize);
Marshal.Copy(rawdatas,
0
, buffer, rawsize);
object
retobj
=
Marshal.PtrToStructure(buffer, anytype);
Marshal.FreeHGlobal(buffer);
return
retobj;
}
}
QQ:273352165 evlon#126.com 转载请注明出处。
查看全文
相关阅读:
CF528D Fuzzy Search
P3489 付公主的背包
有标号的DAG计数
P4609 [FJOI2016]建筑师
mds/journal.cc: 2929: FAILED assert解决
Ceph根据Crush位置读取数据
关于backfill参数建议
rados put striper功能的调试
Cephfs的文件存到哪里了
为什么删除的Ceph对象还能get
原文地址:https://www.cnblogs.com/evlon/p/865272.html
最新文章
HDU 2036 改革春风吹满地(多边形面积)
HDU 1548 A strange lift(简单BFS)
HDU 3341 Lost's revenge(AC自动机+状压DP)
Manacher
HDU 3068 最长回文(Manacher模板题)
HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
11.MATLAB基本编程
10.概率和数理统计
9.积分和微分运算
8.MATLAB数据分析
热门文章
7.matlab字符串分析
6.矩阵的特征和线性代数
5.数组和矩阵分析
4.matlab基础
38.Qt模型/视图结构
[SDOI2017]数字表格
P3312 [SDOI2014]数表
P4714 「数学」约数个数和
P4426 [HNOI/AHOI2018]毒瘤
bzoj5093 图的价值
Copyright © 2011-2022 走看看