Array.ConvertAllメソッドを使用できます。
例:
int[] iBuf = new int[2];
...
short[] sBuf = Array.ConvertAll(iBuf, input => (short) input);
この方法は、入力アレイ及びコンバータを取り、結果が希望の配列であろう。
編集: さらに短いバージョンでは、既存のConvert.ToInt16メソッドを使用することになります。内部ConvertAll:
int[] iBuf = new int[5];
short[] sBuf = Array.ConvertAll(iBuf, Convert.ToInt16);
ConvertAllはどのように機能しますか?のは、実装を見てみましょう:
public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter)
{
if (array == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
}
if (converter == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.converter);
}
Contract.Ensures(Contract.Result<TOutput[]>() != null);
Contract.Ensures(Contract.Result<TOutput[]>().Length == array.Length);
Contract.EndContractBlock();
TOutput[] newArray = new TOutput[array.Length];
for (int i = 0; i < array.Length; i++)
{
newArray[i] = converter(array[i]);
}
return newArray;
}
は、実際の質問に答えるために...いや、ある時点ですべての値を変換するために、関係するループがあるでしょう。あなた自身でプログラムすることも、すでに構築されたメソッドを使用することもできます。
簡単な答えは何である - intは4つのバイトを使用し、ショーツ2使用しますバイト - 基本的に代替バイトのペアをコピーする必要があります。以下の答えがうまくいきますが、メソッドのカバーの下でループを使用します。あなたの配列のサイズに応じて、あなた自身の方法でより速い解を書くことが可能かもしれません。 – PaulF