Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: Inusha en Noviembre 06, 2018, 07:20:28 pm

Título: Duda con una cosa.
Publicado por: Inusha en Noviembre 06, 2018, 07:20:28 pm
Hola, soy nuevo en este foro y he leido algunos de los cuadernos, tanto los nuevos como los viejos. Pero no
entendí algunas cosas, aunque la que mas me urge es pasar de binario a hexadecimal. ¿es realmente necesario
para el cuaderno de punteros o es solo algo opcional?. Y si es necesario... ¿ hay algun libro, consejo o lección
que me podais decir para hacerlo y bien? Gracias por su atención.
Título: Re:Duda con una cosa.
Publicado por: ravenheart en Noviembre 09, 2018, 11:42:45 pm
Es importante, pero no es imprescindible hacerlo a mano. Si usas windows, la calculadora tiene un modo "programador" que te convierte entre decimal, octal, binario y hexadecimal.

Convertir entre binario y hexadecimal es relativamente sencillo, por ser cada dígito hexadecimal equivalente a 4 dígitos binarios (bits).
Código: [Seleccionar]
BIN   = DEC = HEX
0000 = 0     = 0
0001 = 1     = 1
0010 = 2     = 2
0011 = 3     = 3
0100 = 4     = 4
0101 = 5     = 5
0110 = 6     = 6
0111 = 7     = 7
1000 = 8     = 8
1001 = 9     = 9
1010 = 10   = A
1011 = 11   = B
1100 = 12   = C
1101 = 13   = D
1110 = 14   = E
1111 = 15   = F

Entonces, si tienes el número hexadecimal 0xA3B7 en binario sería 1010 0011 1011 0111 (el 0x es una convención en algunos lenguajes de programación. En C, por ejemplo, 0x123 indica el número 123 hexadecimal).

Convertir entre octal y binario es muy parecido, solo que cada dígito octal son solo 3 bits (cogerías de la tabla anterior solo hasta el 7, quitando el primer bit, es decir, el cero de más a la izquierda).

Convertir entre decimal y los otros sistemas es más complicado porque no hay una relación sencilla como entre hexadecimal u octal y binario.
Generalizando, dada una base B (el sistema decimal es base 10, el hexadecimal base 16, el octal base 8 y el binario base 2), para convertir un número a decimal:
Coges el número de más a la derecha y lo múltiplicas por 1.
Coges el siguiente número y lo multiplicas por 1 y por la base (1xB = B)
Coges el siguiente número y lo multiplicas por 1, por la base, y otra vez por la base (1xBxB = BxB)
Y así sucesivamente. Y luego sumas todos.

Volviendo al ejemplo anterior, 0xA3B7:
Multiplicas 0x7 por 1 = 7
Multiplicas 0xB (11) por la base (16) = 11x16 = 176
Multiplicas 0x3 por la base dos veces = 3x16x16 = 3x256 = 768
Multiplicas 0xA (10) por la base tres veces = 10x16x16x16 = 10x4096 = 40960
Luego sumas todo:
7 + 176 + 768 + 40960 = 41911
Título: Re:Duda con una cosa.
Publicado por: Inusha en Noviembre 12, 2018, 07:29:07 pm
Es importante, pero no es imprescindible hacerlo a mano. Si usas windows, la calculadora tiene un modo "programador" que te convierte entre decimal, octal, binario y hexadecimal.

Convertir entre binario y hexadecimal es relativamente sencillo, por ser cada dígito hexadecimal equivalente a 4 dígitos binarios (bits).
Código: [Seleccionar]
BIN   = DEC = HEX
0000 = 0     = 0
0001 = 1     = 1
0010 = 2     = 2
0011 = 3     = 3
0100 = 4     = 4
0101 = 5     = 5
0110 = 6     = 6
0111 = 7     = 7
1000 = 8     = 8
1001 = 9     = 9
1010 = 10   = A
1011 = 11   = B
1100 = 12   = C
1101 = 13   = D
1110 = 14   = E
1111 = 15   = F

Entonces, si tienes el número hexadecimal 0xA3B7 en binario sería 1010 0011 1011 0111 (el 0x es una convención en algunos lenguajes de programación. En C, por ejemplo, 0x123 indica el número 123 hexadecimal).

Convertir entre octal y binario es muy parecido, solo que cada dígito octal son solo 3 bits (cogerías de la tabla anterior solo hasta el 7, quitando el primer bit, es decir, el cero de más a la izquierda).

Convertir entre decimal y los otros sistemas es más complicado porque no hay una relación sencilla como entre hexadecimal u octal y binario.
Generalizando, dada una base B (el sistema decimal es base 10, el hexadecimal base 16, el octal base 8 y el binario base 2), para convertir un número a decimal:
Coges el número de más a la derecha y lo múltiplicas por 1.
Coges el siguiente número y lo multiplicas por 1 y por la base (1xB = B)
Coges el siguiente número y lo multiplicas por 1, por la base, y otra vez por la base (1xBxB = BxB)
Y así sucesivamente. Y luego sumas todos.

Volviendo al ejemplo anterior, 0xA3B7:
Multiplicas 0x7 por 1 = 7
Multiplicas 0xB (11) por la base (16) = 11x16 = 176
Multiplicas 0x3 por la base dos veces = 3x16x16 = 3x256 = 768
Multiplicas 0xA (10) por la base tres veces = 10x16x16x16 = 10x4096 = 40960
Luego sumas todo:
7 + 176 + 768 + 40960 = 41911
Vaya XD. Me quede igual que cuando empecé, aunque a lo mejor es porque lo mire todo a prisa, en cualquier caso te has marcado un 'antiguo' ciber-testamento, Muchas gracias por decirme la formula y la calculadora. PSD, Una frase que me acabo de acordar,''Un pequeño paso para el hombre, un gran paso para ponerme a estudiar de una vez''.
Título: Re:Duda con una cosa.
Publicado por: ravenheart en Noviembre 13, 2018, 06:17:39 pm
Hombre, leer en diagonal está bien para los memes de internet, pero no vale para aprender cosas serias.
Título: Re:Duda con una cosa.
Publicado por: Inusha en Noviembre 13, 2018, 07:36:09 pm
Hombre, leer en diagonal está bien para los memes de internet, pero no vale para aprender cosas serias.
Ya... lo siento, por eso he copiado tu comentario en un blog de notas para mirarlo pacientemente, no soy de los que tienen prisa, pero si de los que tienen un horario muy apretado. Y leer en diagonal te sirve para tener al menos una ligera idea, al menos para ''allanar'' el aprendizaje.