Каким способом лучше всего преобразовать из Sbyte [] в Byte []

#c# #.net

#c# #.net

Вопрос:

Я рассматривал несколько способов преобразования из sbyte [] в byte []

Наиболее распространенные подходы, которые я видел, заключаются в следующем

1.

 sbyte[] signed = { -2, -1, 0, 1, 2 }; 
byte[] unsigned = (byte[]) (Array)signed; 
  

2.

 sbyte[] signed = { -2, -1, 0, 1, 2 }; 
byte[] unsigned = new byte[signed.Length]; 
Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length); 
  

3.

 byte[] dest = Array.ConvertAll(sbyteArray, (a) => (byte)a); 
  

Каковы плюсы и минусы этих методов? Чтобы привести вам пример того, чего я пытаюсь достичь. Я получаю изображение в виде sbyte [] и хотел бы использовать класс Image для сохранения изображения на диск.

 Image pic = Image.FromStream(new MemoryStream((byte[]) ((Array) sbyteArr)));
  

Ответ №1:

# 1 — ваш лучший выбор. Даже если это кажется своего рода «хакерским», это просто хак, чтобы порадовать компилятор. И этот, очевидно, будет самым быстрым, потому что данные не будут скопированы.

Я провел быстрый тест, и преобразование типов, похоже, работает отлично. Отрицательные значения преобразуются правильно, поэтому все сводится к простому приведению к типу.