Как преобразовать строку двоичных чисел в строку десятичных чисел?

Я хочу создать программу, которая принимает двоичную строку и превращает ее в десятичную строку. Я знаю, как ты это делаешь:

Convert.ToString(00001000, 2);

Чтобы преобразовать одно двоичное число в одно десятичное, но как бы взять кучу двоичных чисел в строку, например:

00001000 00000101 00001100 00001100 00001111
00010111 00001111 00010010 00001100 00000100

в строку десятичных чисел, например:

8 5 12 12 15
23 15 18 12 4
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
306
2

Ответы 2

Это так же просто, как Convert.ToInt32

Converts the string representation of a number in a specified base to an equivalent 32-bit signed integer.

int output = Convert.ToInt32(input, 2);

Если это в списке, разделенном пробелом, просто используйте string.Split

Returns a string array that contains the substrings in this instance that are delimited by elements of a specified string or Unicode character array.

var input = "00001000 00000101 00001100 00001100 00001111";

var results = input.Split(' ')
                   .Select(x => Convert.ToInt32(x, 2))
                   .ToList();

Console.WriteLine(string.Join(",",results))

Выход

8,5,12,12,15

Полная демонстрация здесь


И для тех из вас, кто играет дома, вот бессмысленный способ преобразовать строку двоичного кода в int, который полностью игнорирует бесконечность.

Примечание: масштаб - это всего лишь ожидаемое количество элементов, его можно легко заменить на List.Add () с небольшими затратами.

[Test("BitShift", "", false)]
public unsafe List<int> Convert(string input, int scale)
{

   var list = new int[scale];

   fixed (int* plist = list)
   fixed (char* pInput = input)
   {
      var pLen = pInput + input.Length;
      var val = 0;
      var pl = plist;
      for (var p = pInput; p < pLen; p++)
         if (*p != ' ')
            val = (val << 1) + (*p - 48);
         else
         {
            *pl = val;
            pl++;
            val = 0;
         }
      *pl = val;
   }

   return list.ToList();
}

Контрольные точки

Вот несколько тестов для вашего удовольствия

----------------------------------------------------------------------------
Mode             : Release (64Bit)
Test Framework   : .NET Framework 4.7.1 (CLR 4.0.30319.42000)
----------------------------------------------------------------------------
Operating System : Microsoft Windows 10 Pro
Version          : 10.0.17134
----------------------------------------------------------------------------
CPU Name         : Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Description      : Intel64 Family 6 Model 58 Stepping 9
Cores (Threads)  : 4 (8)      : Architecture  : x64
Clock Speed      : 3901 MHz   : Bus Speed     : 100 MHz
L2Cache          : 1 MB       : L3Cache       : 8 MB
----------------------------------------------------------------------------

Тест 1

--- Standard input ------------------------------------------------------------
| Value    |    Average |    Fastest |    Cycles | Garbage | Test |      Gain |
--- Scale 10 --------------------------------------------------- Time 0.654 ---
| BitShift |   2.433 µs |   2.045 µs |  12.379 K | 0.000 B | Pass |    0.00 % |
| Convert  |   7.348 µs |   6.137 µs |  29.792 K | 0.000 B | Pass | -202.08 % |
--- Scale 100 -------------------------------------------------- Time 0.618 ---
| BitShift |   6.629 µs |   6.137 µs |  26.656 K | 0.000 B | Pass |    0.00 % |
| Convert  |  37.805 µs |  33.320 µs | 136.246 K | 0.000 B | Pass | -470.31 % |
--- Scale 1,000 ------------------------------------------------ Time 0.978 ---
| BitShift |  56.409 µs |  48.519 µs | 201.670 K | 0.000 B | Pass |    0.00 % |
| Convert  | 335.717 µs | 286.730 µs |   1.181 M | 0.000 B | Pass | -495.15 % |
--- Scale 10,000 ----------------------------------------------- Time 3.723 ---
| BitShift | 488.767 µs | 415.919 µs |   1.715 M | 0.000 B | Pass |    0.00 % |
| Convert  |   3.209 ms |   2.720 ms |  10.955 M | 0.000 B | Pass | -556.46 % |
--- Scale 100,000 --------------------------------------------- Time 39.832 ---
| BitShift |   5.110 ms |   4.195 ms |  17.788 M | 0.000 B | Pass |    0.00 % |
| Convert  |  42.987 ms |  35.171 ms | 141.218 M | 0.000 B | Pass | -741.28 % |
-------------------------------------------------------------------------------

Чтобы преобразовать сингл следующим образом:

Convert.ToInt32("00001000", 2)

Я думаю, мы можем использовать Regex для замены всех двоичных чисел:

Regex.Replace(binaryNumbers, @"\b\d+\b", new MatchEvaluator((m) => { 
    return Convert.ToInt32(m.Value, 2).ToString(); 
}));

Другие вопросы по теме