如何将C#Struct转换为字节数组 [英] How to convert C# Struct to Byte Array

查看:79
本文介绍了如何将C#Struct转换为字节数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有结构:

Hi, I have structure :

struct StartReadXML
       {
           public int CmdID;//3
           public char[] CmdName;//ReadXML
           public char[] Description;

       };



初始化如下:

StartReadXML startXML = new StartReadXML();

startXML.CmdID = 3;

var charCmdName =s.ToCharArray();

startXML.CmdName =s.ToCharArray();

startXML.Description =p.ToCharArray();

现在,我想将它分配给一个字节数组。使用编组如下所示:


With initializations as below :
StartReadXML startXML=new StartReadXML();
startXML.CmdID = 3;
var charCmdName = "s".ToCharArray();
startXML.CmdName = "s".ToCharArray();
startXML.Description = "p".ToCharArray();
Now, I want it to be assigned to a byte array. Which am doing using marshalling as below:

int sizestartXML = Marshal.SizeOf(startXML);//Get size of struct data
            byte[] startXML_buf = new byte[sizestartXML];//declare byte array and initialize its size
            IntPtr ptr = Marshal.AllocHGlobal(sizestartXML);//pointer to byte array

            Marshal.StructureToPtr(startXML, ptr, true);
            Marshal.Copy(ptr, startXML_buf, 0, sizestartXML);
            Marshal.FreeHGlobal(ptr);

            //Sending struct data  packet
            stm.Write(startXML_buf, 0, startXML_buf.Length);//Modified



但是,它在Structuretoptr转换方法失败了。请帮助将结构数据转换为使用上述步骤的字节。

提前谢谢:) !!


But, it fails at Structuretoptr conversion method. Please help in transferring the struct data as bytes for which am using above steps.
Thanks in advance :) !!

推荐答案

看看这个。



如何在C#中将结构转换为字节数组? [ ^ ]


感谢您的帮助:)! />
这个对我有用

Thanks for your help :)!
This one worked for me
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]





如下:



as below:

struct StartReadXML
        {
            public int CmdID;//3
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
            public string CmdName;//ReadXML
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
            public string Description;//Data to be sent
        };






and

StartReadXML startXML=new StartReadXML();
            startXML.CmdID = 3;
            //var charCmdName = "s".ToCharArray();            
            startXML.CmdName = "Sree";
            startXML.Description = "test";


这篇关于如何将C#Struct转换为字节数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆