Выделение коллекции байтов с прямым порядком байтов в структуру для извлечения значений

Есть проницательный вопрос очтение структуры данных C / C ++ в C # из байтового массива, но я не могу заставить код работать для моей коллекции байтов с прямым порядком байтов (сетевой порядок байтов). (РЕДАКТИРОВАТЬ: обратите внимание, что моя реальная структура имеет более чем одно поле.) Есть ли способ упорядочить байты в версию структуры с прямым порядком байтов, а затем извлечь значения в порядке байтов структуры (хоста) , который обычно мало-порядковый)?

(Обратите внимание, что обратный массив байтов будетне работа - байты каждого значения должны быть обращены, что не дает вам ту же коллекцию, что и обращение всех байтов.)

Это должно обобщить то, что я ищу (LE = LittleEndian, BE = BigEndian):

void Main()
{
    var leBytes = new byte[] {1, 0, 2, 0};
    var beBytes = new byte[] {0, 1, 0, 2};
    Foo fooLe = ByteArrayToStructure<Foo>(leBytes);
    Foo fooBe = ByteArrayToStructureBigEndian<Foo>(beBytes);
    Assert.AreEqual(fooLe, fooBe);
}

[StructLayout(LayoutKind.Explicit, Size=4)]
public struct Foo  {
    [FieldOffset(0)] 
    public ushort firstUshort;
    [FieldOffset(2)] 
    public ushort secondUshort;
}

T ByteArrayToStructure<T>(byte[] bytes) where T: struct 
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    T stuff = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(),typeof(T));
    handle.Free();
    return stuff;
}

T ByteArrayToStructureBigEndian<T>(byte[] bytes) where T: struct 
{
    ???
}

Другие полезные ссылки:

Байт структуры и порядковые номера

Еще немного о байтах и ​​порядке байтов (порядок байтов)

Чтение бинарных файлов более эффективно с помощью C #

Небезопасно и чтение из файлов

Вклад Моно в проблему

Освоение C # структур

Ответы на вопрос(8)

Ваш ответ на вопрос