Convertir de octal a decimal y viceversa en C#

Hola a todos, hoy os voy a explicar como podemos convertir un numero octal a decimal y viceversa en C#.

Si queremos pasar de decimal a octal, es proceso normal es el siguiente:

  • Cogemos el modulo de 8 de ese numero.
  • Multiplicamos ese numero por 10 elevado al indice correspondiente.
  • Lo sumamos al total.
  • Dividimos el numero entre 10.
  • Repetimos el proceso anterior hasta llegar a 0.

El código para pasar de decimal a octal:


public static long decimalOctal(int numero)
{

    long octal = 0;

    const int DIVISOR = 8;
    long digito = 0;

    for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++)
    {
        digito = i % DIVISOR;
        octal += digito * (long)Math.Pow(10, j);
    }


    return octal;
}

Si queremos pasar de decimal a octal, es proceso normal es el siguiente:

  • Cogemos el modulo de 10 de ese numero.
  • Multiplicamos ese numero por 8 elevado al indice correspondiente.
  • Lo sumamos al total.
  • Dividimos el numero entre 10.
  • Repetimos el proceso anterior hasta llegar a 0.
  • Si en cualquier momento, la cifra no esta entre 0 y 7, retornamos un -1 para indicar que esta mal.

El código para convertir de octal a decimal:


public static int octalDecimal(long octal)
{

    int numero = 0;
    int digito = 0;
    const int DIVISOR = 10;

    for (long i = octal, j = 0; i > 0; i /= DIVISOR, j++)
    {
        digito = (int)i % DIVISOR;
        if (!(digito >= 0 && digito <= 7))
        {
            return -1;
        }
        numero += digito * (int)Math.Pow(8, j);
    }

    return numero;
}

Os dejo un pequeño ejemplo:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Funciones4
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Escribe un numero decimal");
            int numero = Convert.ToInt32(Console.ReadLine());

            long octal = decimalOctal(numero);
            Console.WriteLine("El numero decimal " + numero + " en octal es " + octal);

            int decimalO = octalDecimal(octal);
            Console.WriteLine("El numero octal " + octal + " en decimal es " + decimalO);

            Console.ReadLine();
        }

        public static long decimalOctal(int numero)
        {

            long octal = 0;

            const int DIVISOR = 8;
            long digito = 0;

            for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++)
            {
                digito = i % DIVISOR;
                octal += digito * (long)Math.Pow(10, j);
            }


            return octal;
        }


        public static int octalDecimal(long octal)
        {

            int numero = 0;
            int digito = 0;
            const int DIVISOR = 10;

            for (long i = octal, j = 0; i > 0; i /= DIVISOR, j++)
            {
                digito = (int)i % DIVISOR;
                if (!(digito >= 0 && digito <= 7))
                {
                    return -1;
                }
                numero += digito * (int)Math.Pow(8, j);
            }

            return numero;
        }

}


Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.