C#을 구조에서 주문잘못된 구성원이 구조에서 패킷을두고 나는 TCP 클라이언트가
using System.Runtime.InteropServices;
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct tPacket_5000_E
{
public Int16 size;
public Int16 opcode;
public byte securityCount;
public byte securityCRC;
public byte flag;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
public byte[] blowfish;
public UInt32 seedCount;
public UInt32 seedCRC;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 5, ArraySubType = UnmanagedType.I1)]
public UInt32[] seedsecurity;
}
나는 구조에서 패킷을 넣어 사용하는 코드는 다음과 같습니다
tPacket_5000_E packet = new tPacket_5000_E();
GCHandle pin = GCHandle.Alloc(data, GCHandleType.Pinned);
packet = (tPacket_5000_E)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(tPacket_5000_E));
pin.Free();
이제 계속하기 전에이 프로젝트를 C++에서 C#으로 번역한다는 것을 말해야합니다.
이 문제이다 tPacket_5000_E의
마지막 3 부재 INT32있는 C++에서 DWORD 인 (너무 시도 UINT32). Int32의 세 멤버 앞에 오는 값은 C++의 값과 같습니다 (동일한 패킷을 C++ 및 C# 프로젝트에 모두 주입 함).
그러나 세 멤버의 값이 다릅니다.
C에서++ 값은 (올바른) 위치 :
- seedCount : 0x00000079
- seedCRC : 0x000000D1이라는
- SeedSecurity :
- - [0] 0x548ac099
- -1 : 0x03c4d378
- - [2] : 0x292e9eab
- - [3] : 0x4eee5ee3
- - [4] : C에서 # 0x1071206e
값은 (잘못된) 위치 :
- seedCount : 0xd1000000
- seedCRC : 0x99000000
- 시드 보안 :
- - [0] : 0x78548ac0
- -1 : 0xab03c4d3
- - [2] : 0xe3292e9e
- - [3] : 0x6e4eee5e
- - [4] : 0x00107120
두 프로그램의 패킷은 동일한
byte[] data = new byte[] {
0x25, 0x00, 0x00, 0x50, 0x00, 0x00, 0x0E, 0x10,
0xCE, 0xEF, 0x47, 0xDA, 0xC3, 0xFE, 0xFF, 0x79,
0x00, 0x00, 0x00, 0xD1, 0x00, 0x00, 0x00, 0x99,
0xC0, 0x8A, 0x54, 0x78, 0xD3, 0xC4, 0x03, 0xAB,
0x9E, 0x2E, 0x29, 0xE3, 0x5E, 0xEE, 0x4E, 0x6E,
0x20, 0x71, 0x10};
Click here for further information
구조체의 마지막 세 멤버가 다른 이유와 fi 방법 그들을 x?
미리 감사드립니다.
@ 대니얼 L, 해결 방법을 제안 해 주시겠습니까? –
@ 대니얼 L, 편집 해 주셔서 감사합니다. 지금 작동합니다! :) –