问题描述
大家好,由于项目问题,在写算法库的时候,之前是C++实现的,现在需要把C++代码翻译成C#对应小弟有几个地方不太回,请高手帮忙问题1://生成第一次随机种子GUIDGuid;CoCreateGuid(&Guid);dwXorKey=GetTickCount()*GetTickCount();dwXorKey^=Guid.Data1;dwXorKey^=Guid.Data2;dwXorKey^=Guid.Data3;这个是C++里面生成的GUID,C#里面对应的是strings=System.Guid.NewGuid().ToString("D");返回的值是32位字符串,我的问题是我想把它返回的值转换成整形就像dwXorKey^=Guid.Data1;dwXorKey^=Guid.Data2;dwXorKey^=Guid.Data3;这样C++处理好了,如果没有我只能手动分割,这个问题还不重要,主要的是下面2个问题//加密数据WORD*pwSeed=(WORD*)(pcbDataBuffer+sizeof(TCP_Info));DWORD*pdwXor=(DWORD*)(pcbDataBuffer+sizeof(TCP_Info));这个是C++代码pcbDataBuffer是一个数组,如果这句话要转换成C#该如何写,(pcbDataBuffer+sizeof(TCP_Info)这句话主要不会用,还有这一句MoveMemory(pcbDataBuffer+sizeof(TCP_Head)+sizeof(DWORD),pcbDataBuffer+sizeof(TCP_Head),wDataSize);如何翻译成C#对应小弟在此感谢大牛帮下忙
解决方案
解决方案二:
c++的方法生成DLL以后可以直接在c#中调用的,有必要把c++代码转成c#代码吗?
解决方案三:
1、Guid.ToByteArray();2、楼主不知道操作指针,和操作数组是等价的吗?
解决方案四:
extern“C”这个声明的就是为了实现C++与C及其它语言的混合编程既然c++的算法已经实现了,封装一下,c#通过dllimport就可以调用了
解决方案五:
Guidguid=System.Guid.NewGuid();
直接得到的结构体就是你想要的,不用转换成字符串。
解决方案六:
你的类型结构都没给出来,别人怎么好给你写代码呢。WORD*pwSeed=(WORD*)(pcbDataBuffer+sizeof(TCP_Info));DWORD*pdwXor=(DWORD*)(pcbDataBuffer+sizeof(TCP_Info));这两句话就是从整个缓充区中得到实际数据的开始地址。MoveMemory(pcbDataBuffer+sizeof(TCP_Head)+sizeof(DWORD),pcbDataBuffer+sizeof(TCP_Head),wDataSize)这句也差不多。从指定位置复制缓冲区。相应的函数是Buffer.BlockCopy