Преобразование Int32 в 24-разрядное целое число со знаком - PullRequest
3 голосов
/ 07 февраля 2011

Мне нужно преобразовать значение Int32 в 3-байтовое (24-битное) целое число.Порядковый номер остается тем же самым (немного), но я не могу понять, как правильно перемещать знак.Значения уже ограничены нужным диапазоном, я просто не могу понять, как преобразовать 4 байта в 3. Используя C # 4.0.Это для аппаратной интеграции, поэтому я должен иметь 24-битные значения, не могу использовать 32-битные.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Нашел это: http://bytes.com/topic/c-sharp/answers/238589-int-byte

int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

звучит так, как будто вам просто нужно получить последние 3 элемента массива.

EDIT:

как указал Иеремия, вам нужно сделать что-то вроде

int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

if (BitConverter.IsLittleEndian) {
    // get the first 3 elements
} else {
    // get the last 3 elements
}
1 голос
/ 07 февраля 2011

Если вы хотите сделать это преобразование, просто удалите верхний байт четырехбайтового числа. Представление дополнения Two позаботится о знаке правильно. Если вы хотите сохранить 24-битное число в переменной Int32, вы можете использовать v & 0xFFFFFF, чтобы получить только младшие 24 бита. Я видел ваш комментарий о байтовом массиве: если у вас есть место в массиве, запишите все четыре байта числа и просто отправьте первые три; однако это характерно для систем с прямым порядком байтов.

...