clover82625 2019-02-11 16:31 采纳率: 33.3%
浏览 1264
已采纳

C++方法转换成C#语言实现

新手求教
以下C++函数,如何转化成C#实现?

bool Input::InputTest(char* szInput, unsigned long ulInLen, char* szOutput, unsigned long &ulLeftLen)
    {
        if (ulInLen < sizeof(StructA))
        {
            ulLeftLen = sizeof(StructA) - ulInLen;
            return false;
        }
        StructB* b1 = (StructB*)(&szInput[ulInLen - sizeof(StructB)]);
        StructA* pStructA = (StructA*)szInput;
        StructC* c = (StructC*)(szInput + sizeof(StructA));
        memcpy(szOutput, szInput + sizeof(StructA), sizeof(StructD));
        return true;
    }
  • 写回答

2条回答 默认 最新

  • bbksoft 2019-02-19 14:16
    关注
    public static object BytesToStruct(byte[] bytes, int pos, Type strcutType)
            {
                int size = Marshal.SizeOf(strcutType);
                IntPtr buffer = Marshal.AllocHGlobal(size);
                try
                {
                    Marshal.Copy(bytes, pos, buffer, size);
                    return Marshal.PtrToStructure(buffer, strcutType);
                }
                finally
                {
                    Marshal.FreeHGlobal(buffer);
                }
            }
    
            public static int SizeOf(Type strcutType)
            {
                return Marshal.SizeOf(strcutType);
            }
    
    
            bool InputTest(byte[] szInput, int ulInLen, byte[] szOutput, ref int ulLeftLen)
            {
                if (ulInLen < SizeOf(typeof(StructA)))
                {
                    ulLeftLen = SizeOf(typeof(StructA)) - ulInLen;
                    return false;
                }
                StructB b1 = (StructB)BytesToStruct(szInput, ulInLen - SizeOf(typeof(StructB)), typeof(StructB));
                StructA pStructA = (StructA)BytesToStruct(szInput, 0, typeof(StructA));
                StructC c = (StructC)BytesToStruct(szInput, SizeOf(typeof(StructA)), typeof(StructC));
    
                Array.Copy(szInput, SizeOf(typeof(StructA)), szOutput, 0, SizeOf(typeof(StructD)));
    
                return true;
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题