根據八轉十六改編
/// <summary>
/// 將16進位數轉換成8進位數
/// </summary>
/// <param name="convertFrom">十六進位數</param>
/// <returns>八位元</returns>
private string ConvertNumber8To16(string convertFrom) {
try
{
string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty).Replace("2", string.Empty).Replace("3", string.Empty).Replace("4", string.Empty).Replace("5", string.Empty).Replace("6", string.Empty).Replace("7", string.Empty).Replace("8", string.Empty).Replace("9", string.Empty).Replace("A", string.Empty).Replace("B", string.Empty).Replace("C", string.Empty).Replace("D", string.Empty).Replace("E", string.Empty).Replace("F", string.Empty);
if (check.Length > 0)
{
//errorHandle
return string.Empty;
}
string convertTo = string.Empty, convertTo2;//目標數convertTo:將八進位From轉換成進位To,
convertTo2 = ConvertNumber16To2(convertFrom);//先轉化為二進位
convertTo = ConvertNumber2To8(convertTo2);
////把二進數轉換為十進位數
//Int64 intTen = Convert.ToInt32(convertTo2.Trim(), 2);
////把十進位數轉換為八位元
//convertTo = Convert.ToString(intTen, 8);
return convertTo;
}
catch (Exception ex) { return ""; }
}
/// <summary>
/// 將16進位轉換為2進位
/// </summary>
/// <param name="convertFrom">十六進位數</param>
/// <returns>位元</returns>
private string ConvertNumber16To2(string convertFrom)
{
string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty).Replace("2", string.Empty).Replace("3", string.Empty).Replace("4", string.Empty).Replace("5", string.Empty).Replace("6", string.Empty).Replace("7", string.Empty).Replace("8", string.Empty).Replace("9", string.Empty).Replace("A", string.Empty).Replace("B", string.Empty).Replace("C", string.Empty).Replace("D", string.Empty).Replace("E", string.Empty).Replace("F", string.Empty);
if (check.Length > 0)
{
//errorHandle
return string.Empty;
}
string convertTo = string.Empty, bit;
for (int i = convertFrom.Length - 1; i >= 0; i--)
{
bit = convertFrom.Substring(i, 1);
switch (bit)
{
case "0":
convertTo = "0000" + convertTo;
break;
case "1":
convertTo = "0001" + convertTo;
break;
case "2":
convertTo = "0010" + convertTo;
break;
case "3":
convertTo = "0011" + convertTo;
break;
case "4":
convertTo = "0100" + convertTo;
break;
case "5":
convertTo = "0101" + convertTo;
break;
case "6":
convertTo = "0110" + convertTo;
break;
case "7":
convertTo = "0111" + convertTo;
break;
case "8":
convertTo = "1000" + convertTo;
break;
case "9":
convertTo = "1001" + convertTo;
break;
case "A":
convertTo = "1010" + convertTo;
break;
case "B":
convertTo = "1011" + convertTo;
break;
case "C":
convertTo = "1100" + convertTo;
break;
case "D":
convertTo = "1101" + convertTo;
break;
case "E":
convertTo = "1110" + convertTo;
break;
case "F":
convertTo = "1111" + convertTo;
break;
}
}
return convertTo;
}
/// <summary>
/// 將2進位轉換為8進位
/// </summary>
/// <param name="convertFrom">位元</param>
/// <returns>八位元</returns>
private string ConvertNumber2To8(string convertFrom)
{
string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty);
if (check.Length > 0)
{
//errorHandle
return string.Empty;
}
string convertTo = string.Empty, bit;
for (int i = convertFrom.Length - 3; i >= 0; i-=3)
{
bit = convertFrom.Substring(i, 3);//每次減3
switch (bit)
{
case "000":
convertTo = "0" + convertTo;
break;
case "001":
convertTo = "1" + convertTo;
break;
case "010":
convertTo = "2" + convertTo;
break;
case "011":
convertTo = "3" + convertTo;
break;
case "100":
convertTo = "4" + convertTo;
break;
case "101":
convertTo = "5" + convertTo;
break;
case "110":
convertTo = "6" + convertTo;
break;
case "111":
convertTo = "7" + convertTo;
break;
}
}
int residue, temp = 0;
residue = convertFrom.Length % 3;//求餘數
string s = "";
if (residue != 0)
{
if (residue == 1)
{
s= convertFrom.Substring(0, 1);
temp = 1;
}
if (residue == 2)
{
s = convertFrom.Substring(0, 2);
switch (s)
{
case "01": temp = 1; break;
case "10": temp = 2; break;
case "11": temp = 3; break;
}
}
}
if (temp != 0)
{
convertTo = temp.ToString() + convertTo;
}
return convertTo;
}