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 转载请注明出处。
查看全文
相关阅读:
Delphi中常用字符串处理函数
ListView的DrawSubItem时间添加边框,字体变粗问题
解决d7在更高版本上运行乱码问题,或者是调用更高版本的dll
使用Indy解决Could not load SSL Library错误
局域网映射硬盘
delphi http请求用到的编码方式
delphi base64编码
Java基础之抽象类
ORA-12737: Instant Client Light: unsupported server character set CHS16GBK
Android TagFlowLayout完全解析 一款针对Tag的布局
原文地址:https://www.cnblogs.com/evlon/p/865272.html
最新文章
传播规则 隔离级别
Spring Annotation 详解
Spring —— <context:property-placeholder/>元素
Spring MVC —— 前后台传递JSON
Spring MVC —— form表单post提交出现乱码
SpringMVC源码 —— 消息转换器HttpMessageConverter
volatile为什么没有原子性?
js 购物车的实现
js 数组去重复的方法
js 选项卡制作
热门文章
一个简单的 js 时间对象创建
隔行变色的几种方式
Css 特性之 transition和transform
jquery 动态创建的元素,绑定事件无效之解决方法
jquery 三级关联选择效果
js 事件委托
jquery 阻止冒泡事件和阻止默认事件
时间戳,秒级,毫秒级转换DateTime格式
日期问题处理,获取,对比,转换
Delphi DBGrid类控件定位到某一行,并更改为选中状态。
Copyright © 2011-2022 走看看