zoukankan      html  css  js  c++  java
  • C#中结构体与字节流互相转换

    C++的消息结构体如下

    struct cs_message{
    
             u32_t        cmd_type;
    
             char username[16];
    
             u32_t        dstID;
    
             u32_t        srcID;
    
    };
    public class Converter
    {
            public Byte[] StructToBytes(Object structure)
            {
                Int32 size = Marshal.SizeOf(structure);
                Console.WriteLine(size);
                IntPtr buffer = Marshal.AllocHGlobal(size);
                try
                {
                    Marshal.StructureToPtr(structure, buffer, false);
                    Byte[] bytes = new Byte[size];
                    Marshal.Copy(buffer, bytes, 0, size);
                    return bytes;
                }
                finally
                {
                   Marshal.FreeHGlobal(buffer);
                }
            }
    
            public Object BytesToStruct(Byte[] bytes, Type strcutType)
            {
                Int32 size = Marshal.SizeOf(strcutType);
                IntPtr buffer = Marshal.AllocHGlobal(size);
                try
                {
                    Marshal.Copy(bytes, 0, buffer, size);
                    return Marshal.PtrToStructure(buffer, strcutType);
                }
                finally
                {
                    Marshal.FreeHGlobal(buffer);
                }
            }
    }
    static void Main(string[] args)
    
    {
    
        //定义转换类的一个对象并初始化
    
    Converter Convert = new Converter();
    
    //定义消息结构体
    
        my_message m;
    
     
    
        //初始化消息结构体
    
        m = new my_message("yanlina");
    
        m.cmd_type = 1633837924;
    
        m.srcID = 1633837924;
    
    m.dstID = 1633837924;
    
     
    
    //使用转换类的对象的StructToBytes方法把m结构体转换成Byte
    
    Byte[] message = Convert.StructToBytes(m);
    
    //使用转换类的对象的BytesToStruct方法把Byte转换成m结构体
    
    my_message n = (my_message)Convert.BytesToStruct(message, m.GetType());
    
    //输出测试
    
        Console.WriteLine(Encoding.ASCII.GetString(message));
    
        Console.WriteLine(n.username);
    
    }
  • 相关阅读:
    SharePoint 2010 获取当前用户的权限
    SharePoint 2010 移除Ribbon菜单中的命令项
    SqlServer2000孤立用户解决方案
    Hello Go!
    XMLHttpRequest对象介绍——1
    Struts 2 简单配置
    asp.net 2.0热贴收藏
    .NET牛人应该知道些什么(转)?
    ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
    asp.net中的异步页面
  • 原文地址:https://www.cnblogs.com/ChangTan/p/9950371.html
Copyright © 2011-2022 走看看