1
현재 소켓 서버에서 작업 중입니다. 클라이언트가 BigEdian 형식으로 데이터를 전송하므로 this 패키지를 사용하기로 결정했습니다. 그러나 Int64의 경우 다른 값을 부여합니다.빅 엔디안 BinaryReader는 long 값을 읽을 때 잘못된 값을줍니다.
이것은 테스트 코드입니다. 그것은이 내 결과 8130168015229752764
나는 source code 들여다 그리고 이러한 기능을 발견했다 INT32
long val = ((long)868324021119164);
byte[] longval = BitConverter.GetBytes((long)868324021119164);
Array.Reverse(longval);
using (MemoryStream stream = new MemoryStream(longval))
using (BeBinaryReader BeReader = new BeBinaryReader(stream))
{
Console.WriteLine(BeReader.ReadInt64());
}
을 위해 잘 작동합니다. 안전하지 않은 코드 사용 경험이 없습니다.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static long ReadInt64(byte* p)
{
int lo = ReadInt32(p);
int hi = ReadInt32(p + 4);
return (long)hi << 32 | (uint)lo;
}
잘 보이지 않습니다 그래서
public override long ReadInt64()
{
FillBuffer(8);
fixed (byte* p = buffer)
return BigEndian.ReadInt64(p);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static long ReadInt64(byte* p)
{
int lo = ReadInt32(p);
int hi = ReadInt32(p + 4);
return (long)hi << 32 | (uint)lo;
}
내가
감사합니다. 버그가 이미 제출되었음을 알았습니다. 그러나 패키지에서 변경되지 않았습니다. –