Я работаю над проектом связи через последовательный порт. Существует аппаратная часть, отправляющая 16-битные целые значения со знаком, которые принимаются в приложение C# P C. Каждое значение отправляется в двух байтах, младший байт - первый.
Производительность критична, поэтому я ищу способы уменьшить обработку.
Объект C# Последовательный порт предоставляет метод ReadExisting, который возвращает текущие буферизованные значения в виде строки. Он также предоставляет метод Read, который может принимать байтовый массив, который затем заполняется байтами в буфере порта.
Если я считываю все значения в байтовом массиве, мне нужно соединить два байта вместе, чтобы получить 16-битное число.
Я заинтригован строкой, возвращенной методом ReadExisting. Если я создаю массив short (short [] MyValues), я мог бы получить расположение массива в памяти и просто записать строку в это место. Пока я гарантирую, что байты отправляются в правильном порядке, я мог бы просто читать 16-битные значения при необходимости.
В качестве альтернативы, я мог бы возможно создать два массива, один массив шорт, второй массив байтов в два раза больше первого, оба с одинаковым расположением в памяти.
Однако, «здесь будут драконы». У меня нет опыта работы с C# и таким уровнем доступа к памяти. Некоторый краткий гугл предполагает, что это возможно - эта статья имеет некоторую интересную информацию: https://www.developerfusion.com/article/84519/mastering-structs-in-c/
Прежде чем я направлюсь вниз по этой конкретной кроличьей норе, у кого-нибудь есть какие-либо предложения о том, как этого добиться? уровень манипулирования памятью?
Спасибо