Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
.NET 4.x

Перевод BigInteger в двоичную строку

17.03.2016, 18:41. Показов 4516. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
САБЖ.

Собственно первое, что пришло в голову, это сделать ToByteArray, а его ToString, однако наткнулся на очень любопытную делать...
Судя по всему ToByteArray возвращает байты в обратном порядке..

Для примера взял число 70010 = 10101111002

На выходе ожидал строку "1010111100" или "0000001010111100"
C#
1
2
3
4
5
BigInteger BigI = 700; //1010111100
 
byte[] BigIArray = BigI.ToByteArray();
            
string result = string.Concat(BigIArray.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));
BigIArray[0] = 18810, BigIArray[1] = 210
result = "1011110000000010"

Как получить адекватный результат?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2016, 18:41
Ответы с готовыми решениями:

Метод BigInteger.GreatestCommonDivisor (BigInteger, BigInteger)
Как использовать в C# windowsforms метод BigInteger.GreatestCommonDivisor (BigInteger, BigInteger)? Пример кода.

Быстрый перевод значений цветов пикселей изображения в двоичную систему счисления и запись их в строку
Здравствуйте. Имеется изображение формата bmp. Для получения цветов пикселей использую Scanline. Вопрос в следующем, можно ли и как...

Перевод int в BigInteger
Как перевести из BigInteger в int знаю, а вот как наоборот? Добавлено через 25 минут Нашел ответ: сначала нужно из int перебить в...

6
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 21:57
awp-sirius, ну а в чем проблема? 10111100 = 188, 00000010 = 2. Все верно.
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 22:37  [ТС]
Да, верно. Но порядок обратный.
В данном случае операция:
C#
1
string res = string.Join(" ", BigIArray .Select(x => Convert.ToString(x, 2).PadLeft(8, '0')));
Вернёт "10111100 00000010", что если перевести обратно в десятичку = 48130.

Решил проблему следующим образом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public static string ToBinaryString(BigInteger bigint)
        {
            var bytes = bigint.ToByteArray();
            var idx = bytes.Length - 1;
            var base2 = new StringBuilder(bytes.Length * 8);
            var binary = Convert.ToString(bytes[idx], 2);
            base2.Append(binary);
 
            for (idx--; idx >= 0; idx--)
            {
                base2.Append(Convert.ToString(bytes[idx], 2).PadLeft(8, '0'));
            }
 
            return base2.ToString();
        }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 23:36
awp-sirius, ну да, вы же сами запихиваете в старший разряд 188, а в младший - 2. Хотите иного поведения, делайте reverse:
C#
1
2
3
4
5
BigInteger BigI = 700; //1010111100
 
byte[] BigIArray = BigI.ToByteArray();
            
string result = string.Concat(BigIArray.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')).Reverse());
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 23:38  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
вы же сами запихиваете в старший разряд 188, а в младший - 2
Где?
Я так понимаю это особенности BigInteger..
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 23:48
awp-sirius, а не, неправильно код прочитал.
Ну да, ему так удобнее хранить, я тоже когда полиномы делал также делал, младшие разряды в начале, старшие - в конце.
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 23:49  [ТС]
Psilon, В любом случае спасибо за Reverse)
Как говорится, а слона-то я и не приметил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2016, 23:49
Помогаю со студенческими работами здесь

Как делить одно число BigInteger на другое BigInteger, при чем не теряя остаток
Помогите пожалуйста. Надо поделить одно число BigInteger на другое, при чем в результате сохранить весь остаток

Перевод в двоичную сс
Подскажите код программы для перевода числа в двоичную систему. Вот примерная форма, мне надо только в 2чную, для примера. В другие уже сам...

Оператор for. Перевод из 10 СС в двоичную
Не знаю как с помощью цикла for записать данную программу. Подскажите, пожалуйста.

Перевод в двоичную систему
Здравствуйте, как сделать программу в которой можно переводит числа в двоичную систему.Например дано одно слово его нужно перевести в...

Перевод из десятичной СС в двоичную
Исходные данные поместить в сегменте данных. Результаты вывести на экран. Дано десятичное число, записанное в виде строки ASCII-символов....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru