1
現在ソケットサーバで作業しています。 クライアントはBigEdian形式でデータを送信しますので、 thisパッケージを使用することを決定しました。しかし、Int64の場合、それは私に別の値を与えるビッグエンディアンのBinaryReaderは、長い読み込み時に誤った値を返します。
これはテストコードです。これは、これは私の結果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;
}
私は
ありがとうございました。バグがすでに提出されていることがわかりました。しかし、パッケージで変更されていない –