#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 — ваш лучший выбор. Даже если это кажется своего рода «хакерским», это просто хак, чтобы порадовать компилятор. И этот, очевидно, будет самым быстрым, потому что данные не будут скопированы.
Я провел быстрый тест, и преобразование типов, похоже, работает отлично. Отрицательные значения преобразуются правильно, поэтому все сводится к простому приведению к типу.