Преобразовать байтовый массив в плавающие 32-битные и 64-битные?
Как бы вы конвертировали 4 байта в байтовом массиве в 32-битное число с плавающей запятой? Тогда как бы вы сделали то же самое для 8 байтов в байтовом массиве для 64-разрядного числа с плавающей запятой (double)? Я заметил, что класс BitConverter в C# имеет это, однако мне любопытно, что за математика стоит за ним.
В настоящее время я написал довольно много функций преобразования байтов, хотя будет ли эффективнее использовать класс BitConverter вместо моих собственных функций?
1 ответ
Как правило, было бы более эффективно использовать BitConverter
функций, хотя в некоторых случаях (например, преобразование двух байтов в короткий) код работает намного быстрее, если вы пишете встроенную операцию сдвига и / или.
Если вы сомневаетесь, используйте код с Stopwatch
и время выпуска релиза. Это единственный способ узнать, правда.
Однако, если вы имеете дело с массивами значений, то может быть быстрее и проще (но за счет объема памяти) преобразовать весь массив из одного типа в другой, используя Buffer.BlockCopy
,
Например, вы можете скопировать массив значений типа double в массив байтов и обратно следующим образом:
double[] original = {1.0, 2.0, 3.0, 4.0, 5.0};
int byteCount = sizeof(double) * original.Length;
byte[] asBytes = new byte[byteCount];
Buffer.BlockCopy(original, 0, asBytes, 0, byteCount);
double[] copied = new double[original.Length];
Buffer.BlockCopy(asBytes, 0, copied, 0, byteCount);
foreach (double d in copied)
Console.WriteLine(d);
Это может быть более подходящим для вашего конкретного сценария. Как всегда, вам нужно сделать несколько осторожных моментов, чтобы убедиться, что это было полезно.