например, для 1, 2, 128, 256
вывода может быть (16 цифр):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
Я попытался
String.format("%16s", Integer.toBinaryString(1));
он помещает пробелы для заполнения слева:
` 1'
Как поставить 0
s для заполнения. Я не смог найти его в Formatter . Есть другой способ сделать это?
PS этот пост описывает, как форматировать целые числа с левым заполнением 0, но это не для двоичного представления.
java
binary
string-formatting
Хачик
источник
источник
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Ответы:
Я думаю, что это неоптимальное решение, но вы могли бы
источник
Returns a string representation of the integer argument as an unsigned integer in base 2.
В java.util.Formatter нет встроенного двоичного преобразования, я бы посоветовал вам использовать String.replace для замены символа пробела нулями, как в:
Или реализуйте свою собственную логику для преобразования целых чисел в двоичное представление с добавлением левого отступа где-нибудь вдоль строк, указанных в этом так. Или, если вам действительно нужно передавать числа для форматирования, вы можете преобразовать свое двоичное представление в BigInteger, а затем отформатировать его с ведущими нулями, но это очень дорого во время выполнения, например:
источник
Вы можете использовать Apache Commons StringUtils . Он предлагает методы для заполнения строк:
источник
Я пробовал использовать всевозможные вызовы методов, которые раньше не использовал для этой работы, они работали с умеренным успехом, пока я не подумал о чем-то настолько простом, что он мог бы работать, и это сработало!
Я уверен, что об этом думали раньше, не уверен, что это хорошо для длинной строки двоичных кодов, но отлично работает для 16-битных строк. Надеюсь, поможет!! (Обратите внимание, что второй фрагмент кода улучшен)
Спасибо Уиллу за помощь в улучшении этого ответа, чтобы он работал без петли. Это может быть немного неуклюже, но это работает, пожалуйста, улучшите и прокомментируйте, если сможете ....
источник
binString.length()
и 16 для создания строки, а затем добавляя эту строку в binString, а не зацикливая, хотя и с чем-то вроде этого ответа: stackoverflow.com/a/2804866/1353098Вот новый ответ на старый пост.
Чтобы дополнить двоичное значение ведущими нулями до определенной длины, попробуйте следующее:
Если
len = 4
иval = 1
,возвращает строку
"10001"
, затемотбрасывает самый первый символ. Итак, получаем то, что хотим:
Если
val
вероятность будет отрицательной, попробуйте:источник
Более простая версия идеи user3608934 «Это старый трюк, создайте строку с 16 нулями, а затем добавьте обрезанную двоичную строку, которую вы получили»:
источник
Я не знаю "правильного" решения, но могу предложить вам быстрый патч.
Я только что попробовал и убедился, что все работает нормально.
источник
%32s
?пытаться...
Я не думаю, что это "правильный" способ сделать это ... но он работает :)
источник
0000001111111111
для входного значения1023
Любого значения больше , чем будет производить выход изtoBinaryString(1024)
из10000000000
которых является слишком велик дляparseInt(...)
Таким образом, вход работает только для 1К из 64К возможных входных значенийНаивное решение, которое работало бы
Еще один метод:
Это создаст 16-битную строку целого числа 5
источник
Начиная с Java 11, вы можете использовать метод repeat (...) :
Или, если вам нужно 32-битное представление любого целого числа:
источник
Это старый трюк: создайте строку из 16 0, затем добавьте обрезанную двоичную строку, полученную из String.format ("% s", Integer.toBinaryString (1)), и используйте крайние правые 16 символов, отсекая все ведущие 0 '. А еще лучше создайте функцию, которая позволит вам указать длину двоичной строки, которую вы хотите. Конечно, есть миллионы других способов сделать это, включая библиотеки, но я добавляю этот пост, чтобы помочь другу :)
источник
Я бы написал свой собственный класс утилиты с помощью метода, как показано ниже
}
Вывод:
Тот же подход можно применить к любым целым типам. Обратите внимание на тип маски
long mask = 1L << i;
источник
Этот метод преобразует int в String, length = bits. Либо с дополнением нулями, либо с усечением наиболее значимых битов.
источник
Вы можете использовать lib https://github.com/kssource/BitSequence . Он принимает число и возвращает обычную строку, дополненную и / или сгруппированную.
источник
str[i].length()
- длина числа, скажем, 2 в двоичном формате - 01, что соответствует длине 2, измените 4 на желаемую максимальную длину числа. Это можно оптимизировать до O (n). используя continue.источник
// Ниже будут обработаны правильные размеры
источник
источник
numB
иnum
равны и ничем не отличаются