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

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

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

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

Собственно первое, что пришло в голову, это сделать 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2016, 18:41
Ответы с готовыми решениями:

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

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

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

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

6
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 21:57 2
awp-sirius, ну а в чем проблема? 10111100 = 188, 00000010 = 2. Все верно.
0
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 22:37  [ТС] 3
Да, верно. Но порядок обратный.
В данном случае операция:
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
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 23:36 4
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
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 23:38  [ТС] 5
Цитата Сообщение от Psilon Посмотреть сообщение
вы же сами запихиваете в старший разряд 188, а в младший - 2
Где?
Я так понимаю это особенности BigInteger..
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.03.2016, 23:48 6
awp-sirius, а не, неправильно код прочитал.
Ну да, ему так удобнее хранить, я тоже когда полиномы делал также делал, младшие разряды в начале, старшие - в конце.
0
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
17.03.2016, 23:49  [ТС] 7
Psilon, В любом случае спасибо за Reverse)
Как говорится, а слона-то я и не приметил
0
17.03.2016, 23:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 23:49
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru