Мне нужно преобразовать значение Int32 в 3-байтовое (24-разрядное) целое число. Endianness остается тем же (немного), но я не могу понять, как правильно перемещать знак. Значения уже привязаны к правильному диапазону, я просто не могу понять, как преобразовать 4 байта в 3. Используя C# 4.0. Это для аппаратной интеграции, поэтому я должен иметь 24-битные значения, не могу использовать 32 бит.Преобразование Int32 в 24-разрядное целое число со знаком
ответ
Если вы хотите сделать это преобразование, просто удалите верхний байт четырехбайтового номера. Представление двух дополнений правильно позаботится о знаке. Если вы хотите сохранить 24-битное число в переменной Int32
, вы можете использовать v & 0xFFFFFF
, чтобы получить только нижние 24 бита. Я видел ваш комментарий о байтовом массиве: если у вас есть место в массиве, напишите все четыре байта числа и просто отправьте первые три; тем не менее, это специфично для малоинтенсивных систем.
Спасибо за информацию. Я все еще не уверен в знаке, поскольку он обычно находится в самом значительном бит. Например, попробуйте код 'Console.Write (-42 & 0xffffff);'. Или я чего-то не хватает? – drharris
Он будет хранить только самые младшие три байта, которые являются неподписанными (поскольку вы правы относительно бита знака, находящегося в верхнем байте). Однако даже с маской '42' и' -42' будут производить разные результаты после операции И. –
Итак, я могу выполнить 'int bit24 = bit32 & 0xffffff;', а затем выполнить бит2 | = 0x800000; 'если он проверяет на отрицательный? В основном сброс бита знака вручную? – drharris
Нашел: 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
}
Обратите внимание, что в документации указано, что результат «GetBytes» находится в исходной сущности системы, поэтому должен быть тест на переносимость. Я думаю, что вы имели в виду «первые 3 элемента», а не «последние 3» для little-endian. –
Хороший вопрос, но не все ли 3 ответа имеют один и тот же недостаток? или работает v & 0xFFFFFF, потому что логика обрабатывается на более низком уровне? – Joe
Какой недостаток? Требуется система с маленькими концами? Все решения, которые пишут в байтовый массив, похоже, требуют проверки подлинности; 'v & 0xFFFFFF' выполняется в 32-битном слове без необходимости знать, как это представлено в виде байтов. –
- 1. Преобразование 3 байтов в целое число со знаком в C#
- 2. Преобразование неподписанных символов в целое число со знаком
- 3. Преобразование двоичной строки в целое число со знаком - Python
- 4. Разделите целое число со знаком на 2
- 5. Как преобразовать шестнадцатеричную строку в целое число со знаком?
- 6. бит смещение со знаком целое
- 7. Преобразование 24-разрядных данных последовательного чтения ADC из 3-байтового формата в целое число со знаком (int32) в Matlab
- 8. Как вычислить CRC32 как целое число со знаком в C#?
- 9. MySQL конвертирует содержимое BLOB в целое число со знаком
- 10. Лучший способ конвертировать целое число со знаком в unsigned long?
- 11. Преобразование Request.QueryString в целое число
- 12. Как моделировать целое число со знаком с BitVector?
- 13. Почему std :: count возвращает целое число со знаком?
- 14. Как объединить целое число со знаком до нуля?
- 15. Выбрасывает целое число со знаком в двоичное число с плавающей запятой дешевле, чем обратная операция?
- 16. Преобразование поплавка в целое число
- 17. Преобразование [Целое] -> Целое число
- 18. Преобразование двоичной строки из java обратно в целое число со знаком
- 19. Преобразование символа в его целое целое число?
- 20. Преобразование строки в целое число
- 21. Преобразование вектора в целое число
- 22. Преобразование строки в целое число
- 23. Преобразование десятичного в целое число
- 24. Преобразование строки в целое число?
- 25. преобразование строки в целое число
- 26. Логическое преобразование в целое число
- 27. Преобразование коэффициента в целое число
- 28. Преобразование строки в целое число?
- 29. Преобразование строки в целое число
- 30. Преобразование строки в целое число
Какого типа вы планируете хранить 24-разрядное целое число в? –
Байт-массив будет в порядке. Я буду выводить 3 байта через последовательное соединение, поэтому, пока я могу получить его в байтах, я должен идти. – drharris
Эта третья строка ничего не сделает ('i & 0xffffff' всегда положительна). Кроме того, вы можете захотеть следовать второй части ответа Джо, который работает на системах с разными континентностями; код, который у вас есть, будет работать пока, но будет необычным, если вы попытаетесь запустить его на PowerPC или MIPS, например. –