У меня есть массив байтов, которые на самом деле являются 16-битными сэмплами со звуковой карты. Таким образом, 1000 байтов фактически представляют 500 Short (16-битные значения).
В настоящее время я конвертирую их так:
byte [] inputData = new byte[1000];
short [] convertedData = new short[500];
Buffer.BlockCopy(inputData, 0, convertedData , 0, 1000);
Работает нормально и довольно быстро, поскольку это низкоуровневая байтовая копия.
Но есть ли способ сделать это без копии? то есть сказать C # для обработки этой области памяти как массива 500 шорт вместо 1000 байтов? Я знаю, что в C / C ++ я мог бы просто навести указатель, и это сработало бы.
Эта копия выполняется в узком цикле, до 5000 раз в секунду, поэтому, если я смогу удалить копию, это будет полезно.