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. Los campos obligatorios están marcados con *