0
ビッグエンディアンのBinaryReaderの必要性を解決するために、いくつかのアプローチが必要です。ビッグエンディアンのBinaryReaderを取得するには3つの方法はありますか?
ビッグエンディアンのBinaryReaderの必要性を解決するために、いくつかのアプローチが必要です。ビッグエンディアンのBinaryReaderを取得するには3つの方法はありますか?
最初のアプローチは、第二のアプローチは、いくつかの拡張メソッドに
static class BinaryReaderExtensionMethods
{
static public UInt16 ReadUInt16BE(this BinaryReader br)
{
return (UInt16)IPAddress.NetworkToHostOrder(br.ReadInt16());
}
static public UInt32 ReadUInt32BE(this BinaryReader br)
{
return (UInt32)IPAddress.NetworkToHostOrder(br.ReadInt32());
}
static public UInt64 ReadUInt64BE(this BinaryReader br)
{
return (UInt64)IPAddress.NetworkToHostOrder(br.ReadInt64());
}
static public Int16 ReadInt16BE(this BinaryReader br)
{
return (Int16)IPAddress.NetworkToHostOrder(br.ReadInt16());
}
static public Int32 ReadInt32BE(this BinaryReader br)
{
return (Int32)IPAddress.NetworkToHostOrder(br.ReadInt32());
}
static public Int64 ReadInt64BE(this BinaryReader br)
{
return (Int64)IPAddress.NetworkToHostOrder(br.ReadInt64());
}
}
を実装するために第三のアプローチは、(おそらく最高!)ジョンスキートのを使用することですされ、サブクラスBinaryReader
public class BigEndianBinaryReader : BinaryReader
{
public BigEndianBinaryReader(Stream input) : base(input)
{
}
public BigEndianBinaryReader(Stream input, Encoding encoding) : base(input, encoding)
{
}
public BigEndianBinaryReader(Stream input, Encoding encoding, bool leaveOpen) : base(input, encoding, leaveOpen)
{
}
public override UInt16 ReadUInt16()
{
return (UInt16)IPAddress.NetworkToHostOrder(base.ReadInt16());
}
public override UInt32 ReadUInt32()
{
return (UInt32)IPAddress.NetworkToHostOrder(base.ReadInt32());
}
public override UInt64 ReadUInt64()
{
return (UInt64)IPAddress.NetworkToHostOrder(base.ReadInt64());
}
public override Int16 ReadInt16()
{
return (Int16)IPAddress.NetworkToHostOrder(base.ReadInt16());
}
public override Int32 ReadInt32()
{
return (Int32)IPAddress.NetworkToHostOrder(base.ReadInt32());
}
public override Int64 ReadInt64()
{
return (Int64)IPAddress.NetworkToHostOrder(base.ReadInt64());
}
}
にあります作家を含むすばらしい図書館。 link here
既存の投稿の問題点とその問題を解決できなかった方法を明確にしていません。私はちょうど3つの方法が新しい質問を作成するための正当な理由であることを求めていると信じていない(明らかに私はその考えで一人である)。 –
あなたは正しいですが、悲しいことに私のページを投稿する前にその答えを見つけられませんでした。 1)サブクラス化された実装では、そのページで強く批判されたメンバー変数はありません。 2)私の拡張メソッドには、参照されたページにはない、x64の読み込みの署名付きおよび無署名の実装が含まれています。 – Cameron