Почему бы и нет:
UInt16 valLow = BitConverter.ToUInt16();
UInt64 valHigh = (UInt64)BitConverter.ToUInt32();
UInt64 Value = (valHigh << 16) | valLow;
Вы можете сделать это одним утверждением, хотя JIT-компилятор, вероятно, сделает это за вас автоматически.
Это помешает вам прочитать эти два дополнительныхбайты, которые вы в конечном итоге выбрасываете.
Если это не уменьшает процессор, то вы, вероятно, захотите написать свой собственный конвертер, который считывает байты непосредственно из буфера.Вы можете использовать индексирование массива или, если вы считаете это необходимым, небезопасный код с указателями.
Обратите внимание, что, как отметил комментатор, если вы используете любое из этих предложений, то вы либо ограниченыконкретный «порядок байтов», или вам придется написать свой код, чтобы обнаружить маленький / большой порядок байтов и реагировать соответственно.Пример кода, который я показал выше, работает для little-endian (x86).