• Publicidad

Desempaqueta especial

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Desempaqueta especial

Notapor explorer » 2006-01-14 07:23 @349

Buenas...
Un amigo me pregunta cómo es posible usar la función unpack para sacar un valor "network" (32 bits big-endian) pero CON signo ("signed").
Ya lo ha resuelto leyendo un network normal y luego haciendo la típica resta. Pero la pregunta es si es posible hacerlo diréctamente con la función unpack.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Desempaqueta especial

Notapor explorer » 2006-01-14 07:58 @374

Me respondo a mi mismo... encontré una solución:
Código: Seleccionar todo
$val=unpack("N",$raw^"\x80\0\0\0")-(1<<31)

http://www.perlmonks.org/index.pl?node_id=176216
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2006-01-15 13:19 @597

De todos modos no es una solución directa con pack/unpack, el problema es que al ser débilmente tipificado, las expresiones con/sin signo son diferente de trabajar en Perl.

Y nuevamente, las cuestiones de red siempre son dependientes de la plataforma de trabajo, normalmente se recomienda trabajar con funciones a mas bajo nivel que Perl, es decir funciones directas de BSD sockets. inet_aton podría funcionarte mejor para transformar cadenas ASCII a Network Long.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Re: Desempaqueta especial

Notapor explorer » 2006-01-15 13:40 @611

Si, de acuerdo... pero este es un caso muy especial... hay que manejar direcciones network, pero no vamos a realizar ningún tipo de tráfico de datos.
Es más una cuestión sobre enrutado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2006-01-15 13:42 @612

Y no has pensado mejor hacerlo en C? definitivamente mucho mejor. :P

Preferiría raw sockets para esos casos...

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 22 invitados