|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.04.2020, 17:47 | #1 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Эквивалент union в Cи в C#, побайтная обработка длинных целых
В процедуре С# нужно побайтно обработать длинное целое.
В Си это делалось легко и просто созданием байтового указателя на целую переменную через приведение типа или через структуру union. Как подобное можно выполнить в C#? Делать цикл и извлекать байты по маске и сдвигать их? Затратно и громоздко. Что-то не нашел я альтернативы в справочнике по языку C#. Или все же есть способ? |
04.04.2020, 22:52 | #2 |
Пользователь
Регистрация: 27.05.2018
Сообщений: 46
|
Вообще в C# есть указатели, но надо выключить защищенный режим. Ищите в документации.
Но указатели это зло, так как вы легко можете вывалиться за пределы, что приведет к краху приложения или зависанию. А вообще непонятно, чего вы хотите добиться ? для чего вам обработка побайтно long ? |
05.04.2020, 20:55 | #3 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
BitConverter.GetBytes
|
06.04.2020, 17:06 | #4 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Есть большие файлы HEX-кода. По нескольку мегабайт длиной.
Есть процедура на Си, которая их читает и заливает в буферы. Читать побайтно - непроизводительно, и процедура читает блоками по 4 или 8 байт, каждый блок сразу конвертирует в бинарный код, и сливает в буфер машинными словами. Теперь надо перенести это в среду Си-шарп. Пока сделал побайтно. Но оставляет внутреннее неудовлетворение. |
06.04.2020, 18:33 | #5 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Также есть готовый алгоритм CRC32 для подсчета контрольных сумм файлов и массивов.
Но в нем считываются 32 битные целые, передаются в функцию, которая читает их побайтно. Делать эквивалент со сдвигом и битовой маской не хочется: будет существенно медленнее. |
06.04.2020, 18:35 | #6 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Black Fregat
Спасибо! BitConverter.GetBytes - то что надо. Я не видел всех перегрузок этого класса. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Си Сложить два длинных целых числа | HelloVikiend | Общие вопросы C/C++ | 43 | 08.06.2018 16:43 |
Умножение длинных целых в паскале | Olven | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 12.02.2012 22:13 |
Умножение двух длинных целых чисел, представленных двунаправленными связанными списками | Rifler | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 28.05.2010 19:31 |
Решение уравнений. Обработка целых данных на С++ | Wia | Помощь студентам | 1 | 27.02.2009 20:08 |
Умножение длинных целых чисел | Rifler | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 04.06.2008 21:12 |