//结构体转字节数组
public byte[] StructToBytes (object structObj)
{ int size = Marshal.SizeOf (structObj);//获取结构体的大小
IntPtr buffer = Marshal.AllocHGlobal (size);//分配内存
try {
Marshal.StructureToPtr (structObj, buffer, false);//将数据从托管对象封装到非托管内容并不销毁旧物体
byte[] bytes = new byte[size];
Marshal.Copy (buffer, bytes, , size);//将数据从非托管内存复制到数组内
return bytes;
} finally {
Marshal.FreeHGlobal (buffer);//释放内存
}
}
//字节转结构体
public object BytesToStruct (byte[] bytes, Type strcutType)
{
int size = Marshal.SizeOf (strcutType);
IntPtr buffer = Marshal.AllocHGlobal (size);
try {
Marshal.Copy (bytes, , buffer, size);
return Marshal.PtrToStructure (buffer, strcutType);
} finally {
Marshal.FreeHGlobal (buffer);
} }

字节转化为结构体BytesToStruct的更多相关文章

  1. <摘录>字节对齐与结构体大小

    说明: 结 构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题.这些问题在平时编程的时候也确实不怎么用到,但在一 些笔试面试题目中出是常常出现,对sizeo ...

  2. 字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式

    上一篇文章讲解了带位域的结构体,在从大端机(Big Endian)传输到小端机(Little Endian)后如何解析位域值.下面继续深入详解字节序,以及位域存储的方式. (1) 我们知道,存储数字时 ...

  3. c#中关于结构体和字节数组转化

    最近在使用结构体与字节数组转化来实现socket间数据传输.现在开始整理一下.对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下: using System; using System ...

  4. C语言结构体的字节对齐原则

    为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据 ...

  5. c语言的结构体字节数统计

    struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如: typedef struct Student{    short id; //2个字节    char name[15]; / ...

  6. [置顶] 什么是C语言结构体字节对齐,为什么要对齐?

    一.概念 对齐跟数据在内存中的位置有关.如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐.比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的.   ...

  7. C# Struct结构体里数组长度的指定

    typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...

  8. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  9. C语言回顾-结构体、枚举和文件

    1.构造类型 根据已经定义的一个或多个数据类型用构造的方法来定义. 分为:数组.结构体和共用体 2.结构体 struct 结构体名{ 成员列表: }; 1)结构体定义完成以后,计算机不会给结构体分配存 ...

随机推荐

  1. Jquery中事件的重复绑定

    问题:事件的绑定具有叠加效果,已有绑定的函数时,再次绑定,执行时会出现绑定多少次,触发多少次的情况 解决:1.on();绑定事件,提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind(). ...

  2. SVN-您的主机中的软件中止了一个已建立的连接

    关于这个问题,网络上有各种解决的办法,关闭防火墙,HTTP/HTTPS切换,改端口... ...但我都试了没有用.本来一直用的好好的,突然就出现了这个问题,而且在几分钟前都是正常的.下面来说说我都干了 ...

  3. Hadoop错误之namenode宕机的数据恢复

    情景再现: 在修复hadoop集群某一个datanode无法启动的问题时,搜到有一个答案说要删除hdfs-site.xml中dfs.data.dir属性所配置的目录,再重新单独启动该datanode即 ...

  4. ajax登录验证-js

    1.html代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  5. Json.NET Performance Tips

    原文: http://www.newtonsoft.com/json/help/html/Performance.htm To keep an application consistently fas ...

  6. vue_小项目_模糊搜索(列表过滤)_结果排序

    html <div id="test"> <label> <input type="text" v-model="sea ...

  7. 【zc】 PHP中json_encode(编码) 与 json_decode(解码) 【aa】

    一.json_encode() 对变量进行JSON编码, 语法: json_encode ( $value [, $options = 0 ] ) 注意:1.$value为要编码的值,且该函数只对UT ...

  8. solr 入门

    这个博客写的不错,很详细 https://blog.csdn.net/wzy18210825916/article/details/80946454

  9. BringWindowToTop完美激活窗口与置顶

    void ActiveWin(IntPtr h) { IntPtr hForeWnd = GetForegroundWindow();//获取当前窗口句柄 int tIdCur = GetWindow ...

  10. laravel的日志权限

    命令行脚本运行时报错 UnexpectedValueException  : The stream or file "/Data/PMS/storage/logs/laravel-2019- ...