Cosmos/source/Archive/Cosmos.Kernel/Extension/Binary.cs

137 lines
3 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Cosmos.Kernel {
public static class BinaryExtension {
#region Extension methods
public static string ToBinary(this byte n)
{
return ConvertToBinary((UInt32)n);
}
public static string ToBinary(this byte n, int width)
{
return ConvertToBinary((UInt32)n).PadLeft(width, '0');
}
public static string ToBinary(this byte n, int width, bool prefix, bool suffix)
{
string bin = "";
if (prefix)
bin += GetPrefix();
bin += ConvertToBinary((UInt32)n).PadLeft(width, '0');
if (suffix)
bin = bin + GetSuffix();
return bin;
}
public static string ToBinary(this UInt16 n)
{
return ConvertToBinary((UInt32)n);
}
public static string ToBinary(this UInt16 n, int width)
{
return ConvertToBinary((UInt32)n).PadLeft(width, '0');
}
public static string ToBinary(this int n)
{
return ConvertToBinary((UInt32)n);
}
public static string ToBinary(this int n, int width)
{
return ConvertToBinary((UInt32)n).PadLeft(width, '0');
}
public static string ToBinary(this UInt32 n)
{
return ConvertToBinary(n);
}
public static string ToBinary(this UInt32 n, int width)
{
return ConvertToBinary(n).PadLeft(width, '0');
}
public static UInt32 FromBinary(this string n)
{
return ConvertFromBinary(n);
}
#endregion
#region Prefix/Suffix
private static string GetPrefix()
{
return "0b";
}
private static string GetSuffix()
{
return "b";
}
#endregion
#region Conversion
public static string ConvertToBinary(UInt32 d)
{
if (d == 0)
return "0";
string bin = string.Empty;
while (d > 0)
{
if (d.IsOdd())
{
bin = "1" + bin;
d = d - 1;
}
else
{
bin = "0" + bin;
}
d = d / 2;
}
return bin;
}
public static UInt32 ConvertFromBinary(string bin)
{
int multiplier = 1;
int value = 0;
for (int i = bin.Length - 1; i >= 0; i--)
{
if (bin[i].ToString() == "1")
value += multiplier;
multiplier *= 2;
}
return (UInt32)value;
}
private static bool IsOdd(this UInt32 n)
{
if ((n % 2) > 0)
return true;
else
return false;
}
#endregion
}
}