10

BitConverter.GetBytes()さまざまな変数 (さまざまな型) をバイト配列に変換して、各バイトの値をチェックする必要があるカスタム メソッドに渡すために使用しています。

タイプの変数を に渡すことができることに気付きましたbyte(BitConverter.GetBytes()過負荷リストにリストされていなくても、関連する MSDN ページを参照してください)。この場合、戻り値として常に 2 バイトの配列があります。戻り値として 1 バイト配列を使用するべきではありませんか? .NET はバイト引数をどのように解釈しますか?

サンプル:

byte arg = 0x00;
byte[] byteArr = BitConverter.GetBytes(arg);
// Result: byteArr is a 2-bytes array where byte[0] = 0 and byte[ 1] = 0
4

4 に答える 4

4

他の回答が指摘しているように、バイトパラメーターを取る GetBytes オーバーロードはありません。次の質問は、ショートを取るオーバーロードを選択する理由です。たとえば、次のいずれかを選択できます。

GetBytes(short)
GetBytes(int)
GetBytes(long)
GetBytes(float)
...

ショートを選択する理由は、ショートが 2 番目に近いという理由だけではありません。その背後にはより良い理由があります。C# 言語仕様では、次のように説明されています。

「型 S から型 T1 に変換する暗黙の変換 C1 と、型 S から型 T2 に変換する暗黙の変換 C2 が与えられた場合、2 つの変換のうち、より適切な変換は次のように決定されます」 [1]

S から T1 または T2 への 2 つの可能な変換を次に示します。

      S         
C1   byte     short (T1)
C2   byte     int   (T2)

ここで機能するルールは次のとおりです。

「T1 から T2 への暗黙の変換が存在し、T2 から T1 への暗黙の変換が存在しない場合、C1 がより適切な変換です。」

short から int への暗黙的な変換はありますが、int から short への変換は行われないため、byte から short への変換が選択されます。

[1] http://msdn.microsoft.com/en-us/library/aa691339(v=vs.71).aspx (古いコピー)

于 2013-10-17T17:05:11.643 に答える