您可以使用Array.ConvertAll方法。
實施例:
int[] iBuf = new int[2];
...
short[] sBuf = Array.ConvertAll(iBuf, input => (short) input);
此方法需要一個輸入陣列和一個轉換器,其結果將是您所希望的陣列。
編輯: 甚至更短的版本將使用現有的Convert.ToInt16方法。 inside 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