por ejemplo, para 1, 2, 128, 256
la salida puede ser (16 dígitos):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
Lo intenté
String.format("%16s", Integer.toBinaryString(1));
pone espacios para el relleno izquierdo:
` 1'
Cómo poner 0
s para relleno. No pude encontrarlo en Formatter . ¿Existe otra forma de hacerlo?
PD: esta publicación describe cómo formatear números enteros con relleno 0 izquierdo, pero no es para la representación binaria.
java
binary
string-formatting
Khachik
fuente
fuente
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Respuestas:
Creo que esta es una solución subóptima, pero podrías hacer
fuente
Returns a string representation of the integer argument as an unsigned integer in base 2.
No hay una conversión binaria incorporada en java.util.Formatter, le aconsejaría que use String.replace para reemplazar el carácter de espacio con ceros, como en:
O implemente su propia lógica para convertir enteros en representación binaria con relleno izquierdo agregado en algún lugar a lo largo de las líneas dadas aquí . O si realmente necesita pasar números para formatear, puede convertir su representación binaria a BigInteger y luego formatearla con ceros a la izquierda, pero esto es muy costoso en tiempo de ejecución, como en:
fuente
Puede utilizar Apache Commons StringUtils . Ofrece métodos para rellenar cadenas:
fuente
Estaba probando todo tipo de llamadas a métodos que realmente no había usado antes para que esto funcionara, funcionaron con un éxito moderado, hasta que pensé en algo que es tan simple que podría funcionar, ¡y lo hizo!
Estoy seguro de que se ha pensado antes, no estoy seguro de si es bueno para cadenas largas de códigos binarios, pero funciona bien para cadenas de 16 bits. ¡¡Espero eso ayude!! (Tenga en cuenta que se ha mejorado la segunda parte del código)
Gracias a Will por ayudar a mejorar esta respuesta para que funcione sin problemas. Esto puede ser un poco torpe, pero funciona, por favor, mejore y comente si puede ...
fuente
binString.length()
y 16 para crear una cadena y luego agregar esa cadena a binString en lugar de hacer un bucle con algo como esta respuesta: stackoverflow.com/a/2804866/1353098Aquí una nueva respuesta para una publicación anterior.
Para rellenar un valor binario con ceros a la izquierda a una longitud específica, intente esto:
Si
len = 4
yval = 1
,devuelve la cadena
"10001"
, luegodescarta el primer carácter. Entonces obtenemos lo que queremos:
Si
val
es probable que sea negativo, intente:fuente
Una versión más simple de la idea del usuario3608934 "Este es un truco antiguo, crea una cadena con 16 0 y luego agrega la cadena binaria recortada que obtuviste":
fuente
No conozco la solución "correcta", pero puedo sugerirle un parche rápido.
Lo acabo de probar y vi que funciona bien.
fuente
%32s
?tratar...
No creo que esta sea la forma "correcta" de hacer esto ... pero funciona :)
fuente
0000001111111111
para el valor de entrada1023
Cualquier valor mayor que ese producirá la salidatoBinaryString(1024)
de la10000000000
cual es demasiado grande para elparseInt(...)
Por lo tanto, la entrada solo funciona para 1K de 64K posibles valores de entradaUna solución ingenua que funcionaría
Otro método sería
Esto producirá una cadena de 16 bits del entero 5
fuente
A partir de Java 11, puede utilizar el método repeat (...) :
O, si necesita una representación de 32 bits de cualquier número entero:
fuente
Este es un viejo truco, cree una cadena con 16 0 y luego agregue la cadena binaria recortada que obtuvo de String.format ("% s", Integer.toBinaryString (1)) y use los 16 caracteres más a la derecha, cortando los primeros 0's. Mejor aún, cree una función que le permita especificar la longitud de una cadena binaria que desea. Por supuesto, probablemente hay un millón de otras formas de lograr esto, incluidas las bibliotecas, pero estoy agregando esta publicación para ayudar a un amigo :)
fuente
Escribiría mi propia clase de utilidad con el método que se muestra a continuación
}
Salida:
El mismo enfoque podría aplicarse a cualquier tipo de integral. Presta atención al tipo de máscara
long mask = 1L << i;
fuente
Este método convierte un int en un String, length = bits. O bien rellenado con ceros o con los bits más significativos truncados.
fuente
Puede usar lib https://github.com/kssource/BitSequence . Acepta un número y devuelve una cadena naria, rellenada y / o agrupada.
fuente
str[i].length()
es la longitud del número, digamos 2 en binario, es 01, que es la longitud 2, cambie 4 a la longitud máxima deseada del número. Esto se puede optimizar a O (n). utilizando continuar.fuente
// A continuación se manejarán los tamaños adecuados
fuente
fuente
numB
ynum
son iguales y no diferentes de ninguna manera