分類:[C#]
いきなりですが本題に入ります。
Visual C# 2008 Express Editionを使って.Net Framework 2.0のアプリケーションを開発しています。
BinaryStreamから2バイト単位のビッグエンディアン(上位1バイトと下位1バイトを順序通り扱う)として読み込みたかったので、以下のような関数(メソッド)を作りました。
public static ushort BytesToUInt16(BinaryReader Reader)
{
ushort Value;
Value = (ushort)Reader.ReadByte();
Value = (Value << 8) | (ushort)Reader.ReadByte(); // この行がエラーになります。
return Value;
}
何の問題もないプログラムのつもりなのですが、『int型からushort型への暗黙の型変換がある』という旨のエラーになってしまいます。
ただ、どこをどうやってみても、私にはint型が発生するような演算を行っているようには見えないのです。
適当にushort型のキャストを追加すれば簡単にエラーは回避できるのですが、納得できません。
どこでint型が発生しているのでしょうか?
ちなみに、以下のようにキャストを追加してもエラーになりました。
public static ushort BytesToUInt16(BinaryReader Reader)
{
ushort Value;
Value = (ushort)Reader.ReadByte();
Value = (ushort)(Value << 8) | (ushort)Reader.ReadByte(); // やっぱりダメです。
return Value;
}
これがダメなので|演算子の結果がint型になっている感じはするのですが…。
|