mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
137 lines
3 KiB
C#
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
|
|
}
|
|
}
|