Sie können die Array.ConvertAll-Methode verwenden.
Beispiel:
int[] iBuf = new int[2];
...
short[] sBuf = Array.ConvertAll(iBuf, input => (short) input);
Diese Methode nimmt ein Eingangsarray und einen Konverter und das Ergebnis wird die gewünschte Array sein.
Bearbeiten: Eine noch kürzere Version wäre die Verwendung der vorhandenen Convert.ToInt16-Methode. in ConvertAll:
int[] iBuf = new int[5];
short[] sBuf = Array.ConvertAll(iBuf, Convert.ToInt16);
Also, wie funktioniert ConvertAll? Schauen wir uns die Implementierung einen Blick:
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;
}
die eigentliche Frage zu beantworten ... nein, an einem gewissen Punkt wird es eine Schleife beteiligt, um alle Werte zu konvertieren. Sie können es entweder selbst programmieren oder bereits erstellte Methoden verwenden.
Die einfache Antwort ist nein - int verwendet 4 Bytes, verwenden Sie kurze Hosen 2 Bytes - also müssen Sie im Grunde alternative Bytepaare kopieren. Die Antworten, die unten gegeben werden, werden funktionieren - aber unter den Deckungen der Methoden werden sie Schleifen verwenden. Abhängig von der Größe Ihrer Arrays ist es möglich, schnellere Lösungen mit einer eigenen Methode zu schreiben. – PaulF