Как я могу взять два байта и объединить их в один UInt16 в C #? - PullRequest
2 голосов
/ 22 сентября 2010

Я хочу иметь метод с телом:

public UInt16 ReadMemory16(Byte[] memory, UInt16 address)
{
    // read two bytes at the predefined address
}

Итак, я хочу получить значение в памяти [адрес] И следующий байт и объединить их в один UInt16.

Для порядка байтов машина, которую я реализую, имеет младший порядок, если это имеет значение. Как мне получить оба этих байтовых значения и объединить их в один UInt16 в C #?

Ответы [ 3 ]

13 голосов
/ 22 сентября 2010

Один из способов - использовать класс BitConverter:

public UInt16 ReadMemory16(Byte[] memory, UInt16 address)
{
    return System.BitConverter.ToUInt16(memory, address);
}

Это будет интерпретировать байты в соответствии с собственным порядком байтов на машине.

8 голосов
/ 22 сентября 2010

Использовать битовое смещение:

return (ushort)((memory[address + 1] << 8) + memory[address]);

Вы можете использовать класс BitConverter , но имейте в виду, что есть статическое поле только для чтения с именем IsLittleEndian , которое необходимо проверить перед его использованием. Если он уже имеет значение порядка байтов, то вы можете использовать этот класс, но если для него задано неправильное значение, вы не сможете его изменить.

В качестве альтернативы вы можете взглянуть на библиотеку MiscUtil Джона Скита, которая включает в себя класс EndianBitConverter, который позволяет вам указывать порядок байтов.

1 голос
/ 22 сентября 2010

Вы можете использовать Bitconverter.ToUInt16: http://msdn.microsoft.com/en-us/library/system.bitconverter.touint16(v=VS.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...