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 转载请注明出处。
查看全文
相关阅读:
[linux] 使用markdown写文档
[c/c++] C数据结构: 链表 Linked List
Apache 2 : starting apache
GNU/CPIO 学习小结
lsof 命令小结
在Linux中扩展磁盘容量(1)
在linux中扩展磁盘容量(2)LVM
RHEL6.0 QEMU/KVM 建立新的虚拟机之配置Birdged Networking
NFS server down机或重启导致的NFS系统错误
Build linux kernel Module
原文地址:https://www.cnblogs.com/evlon/p/865272.html
最新文章
mysql中timestamp类型数据查找中出现的问题
flex中unexpected end of token stream
flex の style[转自百度空间]
Visual Studio 2010 App_Code中的类无法识别
C#中Split用法【转园子】
request doesn't contain a multipart/formdata or multipart/mixed stream【转】
SQLite在字符串比较中的大小写问题
MSSqlServer中用命令查询所有数据库、表、表中列的详细信息 【转】
原生JS操作DOM的一些常用方法集合【转】
使用TCP协议的NAT穿透技术 【转】
热门文章
js获得浏览器相关参数【转】
httpRuntime 配置【转】
[erlang] gen_tcp传输文件原型(二进制)
[liunx] Linux下制作U盘启动盘
[javascript] node.js包管理工具 npm
[c/c++] C数据结构: 顺序表 Sequence List
[lua] lua编译安装
[erlang] gen_tcp传输文件原型
[android] ubuntu开发环境
[linux] 查看目录/文件字节数
Copyright © 2011-2022 走看看