13 votos

Cómo convertir un número hexadecimal a un número octal?

¿Cómo puedo convertir un número hexadecimal, por ejemplo 0x1A03 a su valor octal?

Sé que es una manera de convertir a decimal y, a continuación, convertir a octal

0x1A03 = 6659 = 0o15003
  • Hay una forma sencilla de hacerlo sin el medio paso (la conversión a decimal o la conversión a binario)?

  • ¿Por qué tendemos a convertir a Base10 en cada momento?

24voto

Alex Bolotov Puntos 249

Una manera más sencilla es ir a través de binario (base 2) en lugar de la base 10.

0x1A03 = 0001 1010 0000 0011

Ahora el grupo de los bits en racimos de 3 a partir de la derecha

0 001 101 000 000 011

Esto le da

0 1 5 0 0 3

Cual es su representación octal.

7voto

Reto Meier Puntos 55904

Creo que la forma más fácil es ir a través de binario. Un dígito hexadecimal corresponde a 4 bits, un dígito octal a 3.

0x1A03 en binario 0001 1010 0000 0011 (agrupadas en 4 bits (nibble). Si puedo reagrupar en 3-grupos de bits (desde la derecha), he 001 101 000 000 011. Eso es octal 0o15003.

4voto

pix0r Puntos 17854

Cuando estás conversión entre bases de $2^n$, usted puede a menudo lo hacen más rápidamente con una completa tabla de conversión. Por ejemplo, entre binario y octal, cada bloque de 3 dígitos binarios va a convertir a un dígito octal: $$\begin{matrix} 000_2=0_8 & 001_2=1_8 & 010_2=2_8 & 011_2=3_8 \\ 100_2=4_8 & 101_2=5_8 & 110_2=6_8 & 111_2=7_8 \end{de la matriz}$$ Del mismo modo, cuando la conversión entre binario y hexadecimal, cada bloque de 4 dígitos binarios convierte a un solo dígito hexadecimal. Debido a estos dos hechos, cada uno de los bloques de 12 (mínimo común múltiplo de 3 y 4) dígitos binarios es de 4 dígitos octales y 3 dígitos hexadecimales, por lo que cada bloque de 3 dígitos hexadecimales puede ser convertida en un bloque de 4 dígitos octales. La tabla para hacer hexadecimal<->octal directamente es bastante grande, aunque, por lo que es generalmente más simple para convertir a binario como una forma intermedia.

También es posible hacer la conversión directamente por la realización de división en octal o hexadecimal, aunque esto puede ser difícil de acostumbrarse.

Creo que tendemos a utilizar decimal como una forma intermedia debido a que estamos más familiarizados y cómodos con base 10 (ya que generalmente tienen 10 dedos de las manos y la usa más a menudo).

1voto

Jon Clegg Puntos 661

Hay un procedimiento rápido que no implica representación intermedia. Usted sólo necesita cuatro tablas de búsqueda suman un total de 544 entradas.

Las respuestas anteriores han establecido que la conversión se puede realizar en bloques de 3 (trabajando de derecha a izquierda). Considerar a la derecha del bloque en el ejemplo:

0xA03 = 1010 0000 0011 B

Es necesario romper esta cadena binaria en cuatro grupos de tres bits, lo que voy a número 1, 2, 3, 4 de la derecha a la izquierda:

1: 011 B

2: 000 B

3: 000 B

4: 101 B

La primera depende sólo de la derecha dígito hexadecimal 0x3. El segundo sólo depende de los dos dígitos de la derecha 0x03 (se pone su último bit de la 0x3 y sus dos primeros bits de 0 x 0). El tercer sólo depende de los dígitos segundo y tercero 0xA0. El cuarto sólo depende de la tercer dígito 0xA. De dónde, sólo es necesario realizar las siguientes conversiones, cada uno de los cuales pueden ser almacenados en su propia estática de la tabla de búsqueda:

1: 0 x 3 --> 03 [16 entradas de cubrir todas las posibilidades]

2: (0 x 0 0 x 3) --> 00 [16 * 16 entradas]

3: (0xA, 0x0) --> 00 [16 * 16 entradas]

4: 0xA --> 5 [16 entradas].

Ahora se repite con el siguiente bloque, relleno con ceros a la izquierda según sea necesario. Continuando con el ejemplo, el siguiente bloque es 0x001:

1: 0 x 1 --> 01

2: (0 x 0 0 x 1) --> 00 horas.

Usted puede parar aquí, ya que todos la entrada original se ha consumido. La salida, trabajando hacia atrás, es 0015003.

Esto responde directamente a las dos partes de la pregunta original: proporciona una conversión sencilla sin medio paso y evita la base 10 (que rara vez se utiliza para el equipo de la conversión de todos modos: por lo general el trabajo que se hace con poco desplazamiento y el enmascaramiento, esencialmente una operación binaria). En caso de que este procedimiento todavía se parece demasiado a la de otras soluciones propuestas, por favor, tenga en cuenta que se realiza absolutamente ninguna aritmética (aparte de disminuir los punteros de entrada y de salida, ya que procede): se necesita una representación de cadena de caracteres (hex) como su entrada, se utiliza a los personajes a su índice de tablas, y las salidas de un octal cadena.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X