나는 어떤 packet.The 문제의 내용에 따라 CRC 체크 바이트를 생성하는 기능은 C#C#에서 포인터로 바이트 []를 할당하는 방법
C++ 코드를 C++에서 함수 번역에 있습니다 : 또한 LPBYTE으로 정의 될 수
unsigned char GenerateCheckByte(char* packet, int length, unsigned long seed)
{
if(!packet) return 0;
unsigned long checksum = 0xFFFFFFFF;
length &= 0x7FFF;
char* ptr = packet;
unsigned long moddedseed = seed << 8;
for(int i = 0; i < length; i++)
checksum = (checksum >> 8)^table[moddedseed + ((*(ptr++)^checksum) & 0xFF)];
unsigned char result = ((checksum>>24)&0xFF) + ((checksum>>8)&0xFF) + ((checksum>>16)&0xFF) + (checksum&0xFF);
return result;
}
숯 * (패킷), 개념은 값 * 패킷 *의 PTR에 할당에게 할당하고시피 * PTR 바이트 배열 increases.Meaning하는 전달 된 그리고 포인터의 값을 증가시킴으로써 다음 바이트로 간다.
나는 C#에서 그것을 시도하고 여러 번 실패했습니다. 몇 가지 노력을 다해서 몇 가지 코드를 찾았지만 실행할 수 없습니다.
C# 코드
public static unsafe byte GenerateCheckByte(byte *packet, int length, UInt32 seed)
{
if (*packet == 0)
return 0;
UInt32 checksum = 0xFFFFFFFF;
length &= 0x7FFF;
byte *ptr = packet;
UInt32 moddedseed = seed << 8;
for (int i = 0; i < length; i++)
checksum = (checksum >> 8)^Table.table[moddedseed + ((*(ptr++)^checksum) & 0xFF)];
byte result = (byte)(((checksum>>24)&0xFF) + ((checksum>>8)&0xFF) + ((checksum>>16)&0xFF) + (checksum&0xFF));
return result;
}
그것은 나쁜 보이지 않는,하지만 난
unsafe
{
packetBuffer[5] = Functions.GenerateCheckByte(&packetBuffer[0], 18, packet.seedCRC);
}
오류를 호출 할 수 없습니다 : "당신은의 내부에 고정되지 않은 식의 주소를 취할 수 고정 된 문 이니셜 "
있습니다
C++ 및 C# 응용 프로그램에서 packetbuffer는 byte []입니다. packetBuffer = new byte [18];
덕분에 훨씬 더 지금! –