Autor
|
Tema: Convertir de u_int32_t a int y al reves (Leído 4,807 veces)
|
Stakewinner00
|
Buenas, hoy estaba programando una cosa con sockets y me encontre que tenia que pasar de u_int32_t a int y al revés. Vi cosas por internet pero no aclaran mucho. Alguien sabe como se puede pasar de u_int32_t a int no con código sino manualmente (con una calculadora en mano)? xD
Saludos y gracias
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Un u_int32_t es un unsigned int en la inmensa mayoría de las maquinas actuales.
Pasar de u_int32_t a int sería dejarlo tal como esta, pasar de int a u_int32_t sería hacerle el valor absoluto.
|
|
« Última modificación: 22 Enero 2014, 15:51 pm por amchacon »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Además, siempre puedes hacer un union.
|
|
|
En línea
|
|
|
|
Stakewinner00
|
Gracias por las respuestas, pero no me funciona nada xD. Estaba editando el code del ejemplo de https://repolinux.wordpress.com/2011/09/18/libnet-1-1-tutorial/#example-6 para hacer spoof de la ip de origen, funciona pero no con la ip que quiero. Supongo que algo estaba haciendo mal. ahora fijándome en todo el code veo que quizás no sea 32 bits sino 8 libnet_autobuild_arp (ARPOP_REQUEST,\ src_mac_addr->ether_addr_octet,\ [b](u_int8_t*)(&src_ip_addr), mac_zero_addr,[/b]\ (u_int8_t*)(&target_ip_addr), l) == -1)
bueno, a ver si logro resolver el problema.
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Bueno, no entiendo esas definiciones de C, pero si estas trabajando con direcciones ipv4 estas son de 32 bits vamos que son un int, ejemplo: 0xffffffffff seria 255.255.255.255. Las Mac serian 6 bytes, si no me confundo.
Y para ponerlas al reves o invertirlas puedes usar bswap en ASM en linea, o hacer algo en C. No se si eso responde tu pregunta.
Un saludo.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
union{ int a; uint32_t b; }n; n.a = 666; cout << n.b;
|
|
|
En línea
|
|
|
|
Stakewinner00
|
ivancea96, ya lo probe y tras estar rato probando me estoy dando cuenta de que lo que falla no es la transformación a unsigned de 32 sino luego con el (u_int8_t*)(&src_ip_addr), mac_zero_addr, de 8 bits. Por ejemplo la dirección "2080483526" me devuelve que la ip es 192.168.1.124 y la dirección "2080483526+1" me devuelve que es 26.121.117.141 no 192.168.1.125
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
|
Re:
« Respuesta #7 en: 22 Enero 2014, 23:35 pm » |
|
Pon el code de como lo transformas, a ver
Enviado desde mi ST21i mediante Tapatalk
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Creo que estas incrementando mal.
Porque no pones las direcciones en hexadecimal. 192.168.1.124 = 0x7c01a8c0, tendrias que incremental 0x7c. "2080483526" en teoria tendria que devolver 198.168.1.124.
Un saludo.
|
|
|
En línea
|
|
|
|
Stakewinner00
|
hoy encontre como solucionarlo mientras estaba en clase cpu2 en efecto, así también funciona. El problema era que yo lo hacia directamente y antes de hacerlo debería dividir las ips por octetos, por ejemplo la ip 192.168.1.129 se tendría que convertir a binario (es como yo lo hice) y sería 11000000.10101000.00000001.10000001 entonces paso el "10000001000000011010100011000000" a decimal unsigned de 32 bits que es "2164369600" y cuando lo paso al socket ya lo lee como debería (192.168.1.129) gracias a todos por su ayuda
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
todos los avi se me graban al reves
Software
|
Cobac
|
2
|
2,611
|
6 Junio 2003, 06:15 am
por Songoku
|
|
|
Por que las pelis se ponen al reves???
Software
|
chocholoco
|
2
|
2,264
|
4 Abril 2003, 03:21 am
por chocholoco
|
|
|
Canopus imagen al reves
Multimedia
|
uce
|
2
|
1,882
|
10 Marzo 2004, 21:29 pm
por uce
|
|
|
Videos Avi al reves
Multimedia
|
pretty0483
|
2
|
2,154
|
5 Marzo 2006, 04:07 am
por pretty0483
|
|
|
pyrit al reves
Wireless en Linux
|
Dondvp
|
0
|
2,618
|
10 Octubre 2011, 23:29 pm
por Dondvp
|
|