¿Cómo puedo convertir la cadena binaria $x_bin="0001001100101"
en su valor numérico $x_num=613
en Perl?¿Cómo convierto una cadena binaria en un número en Perl?
Respuesta
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
Mi forma preferida es:
$x_num = oct("0b" . $x_bin);
citando de man perlfunc
:
oct EXPR oct Interprets EXPR as an octal string and returns the corresponding value. (If EXPR happens to start off with "0x", interprets it as a hex string. If EXPR starts off with "0b", it is interpreted as a binary string. Leading whitespace is ignored in all three cases.)
Eso es ... impactante. Gracias. – innaM
@edg: eso es de esperar en una plataforma de 32 bits; funciona para mí con 64 bits, aunque con una advertencia de portabilidad. – ysth
Siempre utilicé pack, pero acabo de comparar pack, oct y Bit :: Vector y este es por lejos el más rápido de los tres. Es un 1449% más rápido que Bit :: Vector y un 316% más rápido que el paquete en mi sistema. – gpojd
Como de costumbre, hay también un módulo CPAN excelente que debe ser mencionado aquí: Bit::Vector .
La transformación sería algo como esto:
use Bit::Vector;
my $v = Bit::Vector->new_Bin(32, '0001001100101');
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";
Las cadenas binarias pueden ser de casi cualquier longitud y se puede hacer otra cosa sencilla como bits de desplazamiento, etc.
En realidad sólo se puede pegue '0b' en el frente y se trata como un número binario.
perl -le 'print 0b101'
5
Pero esto solo funciona para una palabra.
Usted puede utilizar el método eval()
para evitar el pelado-palabra restricción:
eval "\$num=0b$str;";
- 1. Coffeescript: ¿cómo convierto una cadena en un número?
- 2. ¿Cómo puedo convertir una cadena en un número en Perl?
- 3. Cadena binaria al número entero
- 4. Convertir cadena binaria en número entero
- 5. ¿Cómo extraer un número de una cadena en Perl?
- 6. en python ¿cómo convierto un número de un solo dígito en una cadena de dos dígitos?
- 7. búsqueda binaria en una matriz en Perl
- 8. ¿Cómo convierto una matriz a un hash en Perl?
- 9. En Oracle, ¿cómo convierto un número como 1 en una cadena como "1st"?
- 10. ¿Cómo convierto una cadena en un número entero en el objetivo C?
- 11. OCaml - ¿Cómo convierto int en una cadena?
- 12. ¿Cómo convierto un entero en una cadena en Excel VBA?
- 13. ¿Cómo convierto una cadena en un char * en C++?
- 14. ¿Cómo convierto un largo en una cadena en C++?
- 15. En Erlang, ¿cómo convierto una Cadena en un valor binario?
- 16. ¿Cómo convierto una cadena en un buffer en Python 3.1?
- 17. ¿Cómo convierto un doble en una cadena en C++?
- 18. ¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
- 19. ¿Cómo discretizo los valores en un DataFrame de pandas y los convierto en una matriz binaria?
- 20. ¿Cómo convierto YAML a XML en Perl?
- 21. ¿Cómo convierto una cadena hexadecimal en un entero con signo?
- 22. ¿Cómo convierto un objeto org.w3c.dom.Document en una Cadena?
- 23. ¿Cómo convierto un InputStream a una cadena en Java?
- 24. ¿Cómo convierto un objeto Rails DateTime en una cadena XML?
- 25. Cómo convierto un nombre de función en una cadena
- 26. ¿Cómo convierto un UIColor en una cadena hexadecimal?
- 27. ¿Cómo convierto una cadena a un tipo int en C#?
- 28. ¿Cómo convierto una cadena en un método de clase?
- 29. ¿Cómo convierto una cadena que se parece a un número hexadecimal a un número hexadecimal real en php?
- 30. Representación binaria de un número en C
Cada herramienta te pido me dice que se traduce en 111111111111111111111111111111111 8589934591. ¿Qué tan seguro está de que 42949672958589934591 es la correcta? – innaM
Esto también lo hace el oct() incorporado, aunque es un nombre bastante pobre para él. –