Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2020, 17:47   #1
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию Эквивалент union в Cи в C#, побайтная обработка длинных целых

В процедуре С# нужно побайтно обработать длинное целое.
В Си это делалось легко и просто созданием байтового указателя на целую переменную через приведение типа или через структуру union.
Как подобное можно выполнить в C#?
Делать цикл и извлекать байты по маске и сдвигать их? Затратно и громоздко.
Что-то не нашел я альтернативы в справочнике по языку C#.
Или все же есть способ?
AnPis вне форума Ответить с цитированием
Старый 04.04.2020, 22:52   #2
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию

Вообще в C# есть указатели, но надо выключить защищенный режим. Ищите в документации.
Но указатели это зло, так как вы легко можете вывалиться за пределы, что приведет к краху приложения или зависанию.

А вообще непонятно, чего вы хотите добиться ? для чего вам обработка побайтно long ?
melky вне форума Ответить с цитированием
Старый 05.04.2020, 20:55   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

BitConverter.GetBytes
Black Fregat вне форума Ответить с цитированием
Старый 06.04.2020, 17:06   #4
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Есть большие файлы HEX-кода. По нескольку мегабайт длиной.
Есть процедура на Си, которая их читает и заливает в буферы.
Читать побайтно - непроизводительно, и процедура читает блоками по 4 или 8 байт, каждый блок сразу конвертирует в бинарный код, и сливает в буфер машинными словами.
Теперь надо перенести это в среду Си-шарп.
Пока сделал побайтно. Но оставляет внутреннее неудовлетворение.
AnPis вне форума Ответить с цитированием
Старый 06.04.2020, 18:33   #5
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Также есть готовый алгоритм CRC32 для подсчета контрольных сумм файлов и массивов.
Но в нем считываются 32 битные целые, передаются в функцию, которая читает их побайтно.
Делать эквивалент со сдвигом и битовой маской не хочется: будет существенно медленнее.
AnPis вне форума Ответить с цитированием
Старый 06.04.2020, 18:35   #6
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Black Fregat
Спасибо!
BitConverter.GetBytes - то что надо. Я не видел всех перегрузок этого класса.
AnPis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си Сложить два длинных целых числа 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