//Usings.
using System;
using System.Text;
/// <summary>
/// Convierte un número binario en octal.
/// </summary>
/// <param name="binaryNumber">El número binario a convertir representado como una cadena de caracteres.</param>
/// <returns>El número octal resultante como una cadena de caracteres.</returns>
public static string ConvertBinaryToOctal(string binaryNumber)
{
if (!IsBinary(binaryNumber))
{
throw new ArgumentException("El número binario no es válido.");
}
int numDigits = binaryNumber.Length;
int paddingZeros = (numDigits % 3 == 0) ? 0 : (3 - (numDigits % 3));
binaryNumber = new string('0', paddingZeros) + binaryNumber;
StringBuilder octalNumber = new StringBuilder();
for (int i = 0; i < binaryNumber.Length; i += 3)
{
string binaryGroup = binaryNumber.Substring(i, 3);
int decimalValue = ConvertBinaryToDecimal(binaryGroup);
octalNumber.Append(ConvertDecimalToOctal(decimalValue));
}
return octalNumber.ToString().TrimStart('0');
}
/// <summary>
/// Convierte un número binario en decimal.
/// </summary>
/// <param name="binaryNumber">El número binario a convertir representado como una cadena de caracteres.</param>
/// <returns>El número decimal resultante.</returns>
public static int ConvertBinaryToDecimal(string binaryNumber)
{
if (!IsBinary(binaryNumber))
{
throw new ArgumentException("El número binario no es válido.");
}
int decimalNumber = 0;
int power = 0;
for (int i = binaryNumber.Length - 1; i >= 0; i--)
{
if (binaryNumber[i] == '1')
{
decimalNumber += (int)Math.Pow(2, power);
}
power++;
}
return decimalNumber;
}
/// <summary>
/// Convierte un número binario en hexadecimal.
/// </summary>
/// <param name="binaryNumber">El número binario a convertir representado como una cadena de caracteres.</param>
/// <returns>El número hexadecimal resultante como una cadena de caracteres.</returns>
public static string ConvertBinaryToHexadecimal(string binaryNumber)
{
if (!IsBinary(binaryNumber))
{
throw new ArgumentException("El número binario no es válido.");
}
int numDigits = binaryNumber.Length;
int paddingZeros = (numDigits % 4 == 0) ? 0 : (4 - (numDigits % 4));
binaryNumber = new string('0', paddingZeros) + binaryNumber;
StringBuilder hexadecimalNumber = new StringBuilder();
for (int i = 0; i < binaryNumber.Length; i += 4)
{
string binaryGroup = binaryNumber.Substring(i, 4);
int decimalValue = ConvertBinaryToDecimal(binaryGroup);
hexadecimalNumber.Append(ConvertDecimalToHexadecimal(decimalValue));
}
return hexadecimalNumber.ToString().TrimStart('0');
}
/// <summary>
/// Convierte un número octal en binario.
/// </summary>
/// <param name="octalNumber">El número octal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número binario resultante como una cadena de caracteres.</returns>
public static string ConvertOctalToBinary(string octalNumber)
{
if (!IsOctal(octalNumber))
{
throw new ArgumentException("El número octal no es válido.");
}
StringBuilder binaryNumber = new StringBuilder();
for (int i = 0; i < octalNumber.Length; i++)
{
int digitValue = ConvertOctalToDecimal(octalNumber[i].ToString());
string binaryGroup = ConvertDecimalToBinary(digitValue);
binaryNumber.Append(binaryGroup.PadLeft(3, '0'));
}
return binaryNumber.ToString().TrimStart('0');
}
/// <summary>
/// Convierte un número octal en decimal.
/// </summary>
/// <param name="octalNumber">El número octal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número decimal resultante.</returns>
public static int ConvertOctalToDecimal(string octalNumber)
{
if (!IsOctal(octalNumber))
{
throw new ArgumentException("El número octal no es válido.");
}
int decimalNumber = 0;
int power = 0;
for (int i = octalNumber.Length - 1; i >= 0; i--)
{
int digit = int.Parse(octalNumber[i].ToString());
decimalNumber += digit * (int)Math.Pow(8, power);
power++;
}
return decimalNumber;
}
/// <summary>
/// Convierte un número octal en hexadecimal.
/// </summary>
/// <param name="octalNumber">El número octal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número hexadecimal resultante como una cadena de caracteres.</returns>
public static string ConvertOctalToHexadecimal(string octalNumber)
{
if (!IsOctal(octalNumber))
{
throw new ArgumentException("El número octal no es válido.");
}
string binaryNumber = ConvertOctalToBinary(octalNumber);
string hexadecimalNumber = ConvertBinaryToHexadecimal(binaryNumber);
return hexadecimalNumber.TrimStart('0');
}
/// <summary>
/// Convierte un número decimal en binario.
/// </summary>
/// <param name="decimalNumber">El número decimal a convertir.</param>
/// <returns>El número binario resultante como una cadena de caracteres.</returns>
public static string ConvertDecimalToBinary(int decimalNumber)
{
if (decimalNumber < 0)
{
throw new ArgumentException("El número decimal debe ser no negativo.");
}
string binaryNumber = string.Empty;
if (decimalNumber == 0)
{
binaryNumber = "0";
}
else
{
while (decimalNumber > 0)
{
int remainder = decimalNumber % 2;
binaryNumber = remainder.ToString() + binaryNumber;
decimalNumber /= 2;
}
}
return binaryNumber.TrimStart('0');
}
/// <summary>
/// Convierte un número decimal en octal.
/// </summary>
/// <param name="decimalNumber">El número decimal a convertir.</param>
/// <returns>El número octal resultante como una cadena de caracteres.</returns>
public static string ConvertDecimalToOctal(int decimalNumber)
{
if (decimalNumber < 0)
{
throw new ArgumentException("El número decimal debe ser no negativo.");
}
string octalNumber = string.Empty;
if (decimalNumber == 0)
{
octalNumber = "0";
}
else
{
while (decimalNumber > 0)
{
int remainder = decimalNumber % 8;
octalNumber = remainder.ToString() + octalNumber;
decimalNumber /= 8;
}
}
return octalNumber.TrimStart('0');
}
/// <summary>
/// Convierte un número decimal en hexadecimal.
/// </summary>
/// <param name="decimalNumber">El número decimal a convertir.</param>
/// <returns>El número hexadecimal resultante como una cadena de caracteres.</returns>
public static string ConvertDecimalToHexadecimal(int decimalNumber)
{
if (decimalNumber < 0)
{
throw new ArgumentException("El número decimal debe ser no negativo.");
}
string hexadecimalNumber = string.Empty;
if (decimalNumber == 0)
{
hexadecimalNumber = "0";
}
else
{
while (decimalNumber > 0)
{
int remainder = decimalNumber % 16;
hexadecimalNumber = GetHexDigit(remainder) + hexadecimalNumber;
decimalNumber /= 16;
}
}
return hexadecimalNumber.TrimStart('0');
}
/// <summary>
/// Convierte un número hexadecimal en binario.
/// </summary>
/// <param name="hexadecimalNumber">El número hexadecimal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número binario resultante como una cadena de caracteres.</returns>
public static string CovnertHexadecimalToBinary(string hexadecimalNumber)
{
if (!IsHexadecimal(hexadecimalNumber))
{
throw new ArgumentException("El número hexadecimal no es válido.");
}
StringBuilder binaryNumber = new StringBuilder();
for (int i = 0; i < hexadecimalNumber.Length; i++)
{
int digitValue = ConvertHexadecimalToDecimal(hexadecimalNumber[i].ToString());
string binaryGroup = ConvertDecimalToBinary(digitValue);
binaryNumber.Append(binaryGroup.PadLeft(4, '0'));
}
return binaryNumber.ToString().TrimStart('0');
}
/// <summary>
/// Convierte un número hexadecimal en octal.
/// </summary>
/// <param name="hexadecimalNumber">El número hexadecimal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número octal resultante como una cadena de caracteres.</returns>
public static string ConvertHexadecimalToOctal(string hexadecimalNumber)
{
if (!IsHexadecimal(hexadecimalNumber))
{
throw new ArgumentException("El número hexadecimal no es válido.");
}
string binaryNumber = CovnertHexadecimalToBinary(hexadecimalNumber);
string octalNumber = ConvertBinaryToOctal(binaryNumber);
return octalNumber.TrimStart('0');
}
/// <summary>
/// Convierte un número hexadecimal en decimal.
/// </summary>
/// <param name="hexadecimalNumber">El número hexadecimal a convertir representado como una cadena de caracteres.</param>
/// <returns>El número decimal resultante.</returns>
public static int ConvertHexadecimalToDecimal(string hexadecimalNumber)
{
if (!IsHexadecimal(hexadecimalNumber))
{
throw new ArgumentException("El número hexadecimal no es válido.");
}
int decimalNumber = 0;
int power = 0;
for (int i = hexadecimalNumber.Length - 1; i >= 0; i--)
{
int digitValue = GetHexDigitValue(hexadecimalNumber[i]);
decimalNumber += digitValue * (int)Math.Pow(16, power);
power++;
}
return decimalNumber;
}
/// <summary>
/// Verifica si un número binario es válido.
/// </summary>
/// <param name="binaryNumber">El número binario a verificar.</param>
/// <returns>True si el número binario es válido, False en caso contrario.</returns>
public static bool IsBinary(string binaryNumber)
{
bool isBinary = true;
foreach (char digit in binaryNumber)
{
if (digit != '0' && digit != '1')
{
isBinary = false;
}
}
return isBinary;
}
/// <summary>
/// Verifica si un número octal es válido.
/// </summary>
/// <param name="octalNumber">El número octal a verificar.</param>
/// <returns>True si el número octal es válido, False en caso contrario.</returns>
public static bool IsOctal(string octalNumber)
{
bool isOctal = true;
foreach (char digit in octalNumber)
{
if (digit < '0' || digit > '7')
{
isOctal = false;
}
}
return isOctal;
}
/// <summary>
/// Verifica si un número hexadecimal es válido.
/// </summary>
/// <param name="hexadecimalNumber">El número hexadecimal a verificar.</param>
/// <returns>True si el número hexadecimal es válido, False en caso contrario.</returns>
public static bool IsHexadecimal(string hexadecimalNumber)
{
bool isHexadecimal = true;
foreach (char digit in hexadecimalNumber)
{
if (!IsHexDigit(digit))
{
isHexadecimal = false;
}
}
return isHexadecimal;
}
/// <summary>
/// Verifica si un carácter es un dígito hexadecimal válido.
/// </summary>
/// <param name="hexDigit">El carácter a verificar.</param>
/// <returns>True si el carácter es un dígito hexadecimal válido, False en caso contrario.</returns>
public static bool IsHexDigit(char hexDigit)
{
bool isHexDigit = (hexDigit >= '0' && hexDigit <= '9') ||
(hexDigit >= 'A' && hexDigit <= 'F') ||
(hexDigit >= 'a' && hexDigit <= 'f');
return isHexDigit;
}
C#: Conversión de números: binario/octal/decimal/hexadecimal
Tiempo de lectura: 5 minutos