C++转为C#

.Net技术 码拜 8年前 (2016-02-26) 1101次浏览
C++代码如下

typedef struct _ST_CMD_PACKET_
{
	WORD	m_wPrefix;
	BYTE	m_bySrcDeviceID;
	BYTE	m_byDstDeviceID;
	WORD	m_wCMDCode;
	WORD	m_wDataLen;
	BYTE	m_abyData[16];
	WORD	m_wCheckSum;
} ST_CMD_PACKET, *PST_CMD_PACKET;
typedef struct _ST_RCM_PACKET_
{
	WORD	m_wPrefix;
	BYTE	m_bySrcDeviceID;
	BYTE	m_byDstDeviceID;
	WORD	m_wCMDCode;
	WORD	m_wDataLen;
	WORD	m_wRetCode;
	BYTE	m_abyData[14];
	WORD	m_wCheckSum;
} ST_RCM_PACKET, *PST_RCM_PACKET;
BYTE			g_Packet[1024*64];
PST_CMD_PACKET	g_pCmdPacket = (PST_CMD_PACKET)g_Packet;
PST_RCM_PACKET	g_pRcmPacket = (PST_RCM_PACKET)g_Packet;
memset( g_Packet, 0, sizeof( g_Packet ));

这段代码转为C#该怎么写,讨教

解决方案

40

引用 1 楼 doyouknowm 的回复:

这段代码大致可以看懂,但结构是值类型,本人怎么样像代码里那样实现指针?还有两个结构体同放在一块内存,这是什么鬼?

结构是指针类型的,你声明的变量其实就是存的结构的引用

10

引用 10 楼 doyouknowm 的回复:
Quote: 引用 8 楼 Forty2 的回复:
Quote: 引用 LZ doyouknowm 的回复:

…这段代码转为C#该怎么写,讨教

var g_Packet = new byte[1024*64];

那本人怎么把那两个结构体放在g_Packet里面呢

你可以顺序写入/读出。
例如:
头两个字节为m_wPrefix;
第三个字节为m_bySrcDeviceID;

50

结构与字节数组的互换

    class Converter
    {
        //Structure转为Byte数组,实现了序列化
        public static 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);
            }
        }
        //Byte数组转为Structure,实现了反序列化
        public static 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);
            }
        }
    }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++转为C#
喜欢 (0)
[1034331897@qq.com]
分享 (0)