如果想要實做的話就先了解如何轉換,首先 16 進制顧名思義就是遇到16就進位
所以可以表示的範圍為1 ~ 15, 但是10 ~ 15 以 A ~ F 取代
以下範例 先將 16 轉成 2 進制 > 針對每個16進制的數字 拆解成4個位元以表示2進制
F > 1111 , 8 > 1000
最後再將 2 進制轉成 8 進制 > 針對二進位中從尾巴開始數每三個數字及組合成一個8進制數字
如果不足及補零
10101100 每三個分隔 > 10|101|100 > 不足則補零 > 010|101|100 > 轉8進制 > 254
以下為程式實做
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
String line;
while ((line = Console.ReadLine()) != null)
{
String[] binary = new String[16]; //最多接受輸入 16 個數字
String binaryTMP = ""; //輸入的16進位轉2進位
for (int i = 0; i < line.Length; i++)
{
String data = line.Substring(i, 1); //從頭開始切割
if (data.Equals("0")){ //0
//number[i] = 0;
binary[i] = "0000";binaryTMP += binary[i];
continue;
}
else if(data.Equals("1")){ //1
//number[i] = 1;
binary[i] = "0001";binaryTMP += binary[i];
continue;
}
else if(data.Equals("2")){ //2
//number[i] = 2;
binary[i] = "0010";binaryTMP += binary[i];
continue;
}
else if(data.Equals("3")){ //3
//number[i] = 3;
binary[i] = "0011";binaryTMP += binary[i];
continue;
}
else if(data.Equals("4")){ //4
//number[i] = 4;
binary[i] = "0100";binaryTMP += binary[i];
continue;
}
else if(data.Equals("5")){ //5
//number[i] = 5;
binary[i] = "0101";binaryTMP += binary[i];
continue;
}
else if(data.Equals("6")){ //6
//number[i] = 6;
binary[i] = "0110";binaryTMP += binary[i];
continue;
}
else if(data.Equals("7")){ //7
//number[i] = 7;
binary[i] = "0111";binaryTMP += binary[i];
continue;
}
else if(data.Equals("8")){ //8
//number[i] = 8;
binary[i] = "1000";binaryTMP += binary[i];
continue;
}
else if(data.Equals("9")){ //9
//number[i] = 9;
binary[i] = "1001";binaryTMP += binary[i];
continue;
}
else if(data.Equals("A") || data.Equals("a")){ //10
//number[i] = 10;
binary[i] = "1010";binaryTMP += binary[i];
continue;
}
else if(data.Equals("B") || data.Equals("b")){ //11
//number[i] = 11;
binary[i] = "1011";binaryTMP += binary[i];
continue;
}
else if(data.Equals("C") || data.Equals("c")){ //12
//number[i] = 12;
binary[i] = "1100";binaryTMP += binary[i];
continue;
}
else if(data.Equals("D") || data.Equals("d")){ //13
//number[i] = 13;
binary[i] = "1101";binaryTMP += binary[i];
continue;
}
else if(data.Equals("E") || data.Equals("e")){ //14
//number[i] = 14;
binary[i] = "1110";binaryTMP += binary[i];
continue;
}
else if(data.Equals("F") || data.Equals("f")) //15
{
binary[i] = "1111";binaryTMP += binary[i];
}
}
Console.WriteLine(binaryTMP + " "); //二進制
char[] tempCharArr = binaryTMP.ToCharArray(); //將他轉成字元陣列
int[] eight = new int[16];
int pos = 0;
String n = "";
for (int i = tempCharArr.Length-1; i >= 0; i -= 3) //由尾巴開始往回取 一次三個
{
if (i == 1) //不足一個 0
{
n = "0" + tempCharArr[i - 1] + tempCharArr[i];
}
else if (i == 0) //不足兩個 0
{
n = "00" + tempCharArr[i];
}
else
{
n = (tempCharArr[i - 2].ToString()) + (tempCharArr[i - 1].ToString()) + (tempCharArr[i].ToString());
}
//以下將 n 這個二進制轉成八進制
if (n.Equals("000")){
eight[pos] = 0; pos++;
continue;
}
else if (n.Equals("001"))
{
eight[pos] = 1; pos++;
continue;
}
else if (n.Equals("010"))
{
eight[pos] = 2; pos++;
continue;
}
else if (n.Equals("011"))
{
eight[pos] = 3; pos++;
continue;
}
else if (n.Equals("100"))
{
eight[pos] = 4; pos++;
continue;
}
else if (n.Equals("101"))
{
eight[pos] = 5; pos++;
continue;
}
else if (n.Equals("110"))
{
eight[pos] = 6; pos++;
continue;
}
else if (n.Equals("111"))
{
eight[pos] = 7; pos++;
continue;
}
n = "";
}
for (int i = pos-1; i >=0; i--)
{
Console.Write(eight[i]);
}
}
}
}
}
沒有留言:
張貼留言