Create Binary To Hexadecimal converter - Easy way by Getting ‘char’ Method

Posted by ေတဇာလင္း Monday, 12 September 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Binary Number တစ္ခုကို Hexadecimal Number အျဖစ္ ဘရ္လိုေျပာင္းလဲ ယူႏိုင္မလဲ ဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ ေရွ႕သင္ခန္းစာေတြမွာ က်ေနာ္တို႔ Binary To Decimal ေျပာင္းလဲတာ၊ Decimal To Hexadecimal ေျပာင္းလဲတာ အစရွိတဲ့ function ေတြကို ေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ ဒါေၾကာင့္ မိတ္ေဆြတို႔အေနနဲ႔ ၄င္း function ႏွစ္ခုကိုျဖတ္ၿပီး Binary To Hexadecimal ေျပာင္းလဲတာေလးကို ျပဳလုပ္ႏိုင္ပါတရ္။ဒီေန႔ေတာ့ Getting 'char' Method ေလးကို အသံုးျပဳၿပီး Binary Number မွ Hexadecimal Number အျဖစ္သို႔ တိုက္ရိုက္ ေျပာင္းလဲႏိုင္တာေလးကို ေဆြးေႏြးေပးသြားပါ့မရ္ဗ်ာ။ ေရွ႕မွာ ေလ့လာခဲ့ၿပီးသား သင္ခန္းစာေတြကိုပဲ ေက်ာရိုးျပဳၿပီး သာမာန္အေတြးေလးကို ရုပ္လံုးေဖာ္ၾကည့္ထားတာပါ။
သတိျပဳရမရ္႕ Logic အေနနဲ႔ကေတာ့ ကိန္းစဥ္တန္းတစ္ခုကို ဆယ္ျပည့္ကိန္း၊ ရာျပည့္ကိန္း၊ ေထာင္ျပည့္ကိန္း... စသည္တို႔ျဖင့္ စားတဲ့အခါ စားၾကြင္းအျဖင့္ ကိန္းစဥ္တန္းမွာရွိေသာ မိမိလိုခ်င္တဲ့ ကိန္းအေရအတြက္ကို ျဖတ္ယူႏိုင္တရ္ဆိုတာပါပဲဗ်ာ။ ဥပမာ အေနနဲ႔ ကိန္းစဥ္တန္းတစ္ခုကို 10 နဲ႔ စားရင္ ၄င္းကိန္းစဥ္တန္းရဲ႕ ေနာက္ဆံုး 1 လံုးကို စားၾကြင္းအျဖင့္ ျပန္ရမရ္။ 100 နဲ႔ စားရင္ 2 လံုးျပန္ရမရ္၊ 1000 နဲ႔စားရင္ 3 လံုးျပန္ရမရ္ေပါ့... စသည္ျဖင့္ မိမိလိုခ်င္သေလာက္ ျပည့္ကိန္းကို တိုးၿပီး စားႏိုင္တာပဲျဖစ္ပါတရ္ဗ်။
မိတ္ေဆြတို႔ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Binary ကေန Hexadecimal ေျပာင္းတာကို ေအာက္မွာ ဥပမာေလးနဲ႔ အရင္ျပပါ့မရ္။
eg. Binary = 110110110, Hex =? 
so, Binary = 0001 1011 0110   
               = 1      B      6    
               = 1B6 
Binary(000110110110) = Hex(1B6)

အနည္းငယ္ရွင္းရမရ္ဆိုရင္ေတာ... Binary ကေန Hexadecimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ Binary Number ကို Right to Left ေလးလံုးစီ အရင္ျဖတ္ယူပါ့မရ္။ ရလာတဲ့ ေလးလံုးတြဲ Binary Number ကိုမွ Decimal အျဖစ္ ေျပာင္းလဲမရ္။ ရလာတဲ့ Decimal ကို Hexadecimal ေျပာင္းလဲတဲ့အခါမွာ 10 to 15 ကို A to F အျဖစ္ ေျပာင္းလဲယူပါ့မရ္။ ၿပီးရင္ေတာ့ ၄င္း ေလးလံုး Group အလိုက္ ရရွိလာတဲ့ Hexadecimal ေတြကိုစုစည္း ေဖာ္ျပျခင္းလိုက္ျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Hexadecimal Number တစ္ခုကို ရရွိမွာျဖစ္ပါတရ္။ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။ အခက္အခဲရွိတရ္ ဆိုရင္ေတာ့ က်ေနာ္ http://programmingknowledge.blogspot.com/2014/07/5-number-system-conversions-from-binary.html Page မွာ ပံုနဲ႔တကြ ရွင္းျပထားတာရွိပါတရ္ဗ်။
ကဲ... အခုဆိုရင္ က်ေနာ္တို႔ Logic အေတြးကိုလည္း နားလည္သြားၿပီဆိုေတာ့ Coding Flow ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
  1. ပထမဦးဆံုး Binary Number ကို 10000 နဲ႔ စားပါ့မရ္( Binary Number ရဲ႕ ေနာက္ဆံုး(4)လံုးကို ျဖတ္ယူခ်င္လို႔ပါ)။
  2. ရလာတဲ့ စားၾကြင္းကို loop ပတ္ၿပီး က်ေနာ္တို႔ ႀကိဳတင္သတ္မွတ္ထားတဲ့ Binary array နဲ႔ တိုက္ဆိုင္စစ္ေဆးၿပီး ရရွိလာတဲ့ Index Number ကိုဆြဲထုတ္ပါတရ္။
  3. ၄င္း ဆြဲထုတ္ယူလာတဲ့ if( ) statement နဲ႔ စစ္ထုတ္ၿပီး formula ကိုျဖတ္ခိုင္းပါတရ္။ ရလာတဲ့ တန္ဖိုးကို char type ေျပာင္းလဲယူပါ့မရ္။ ရလာတဲ့ Char တန္ဖိုးဟာ က်ေနာ္တို႔ first loop ရဲ႕ Hexadecimal Number ျဖစ္ပါတရ္။
  4. ေနာက္ဆံုးမွာေတာ့ Binary Number ကို 10000 နဲ႔စားၿပီး စားလဒ္ကို သုညနဲ႔ မညီမခ်င္း loop ပတ္ စစ္ထုတ္ေနမွာျဖစ္ပါတရ္။
  5. ေနာက္ဆံုးမွာေတာ့ loop တခါပတ္တိုင္းရရွိလာတဲ့ char တန္းဖိုးေတြကို စုစည္းေရးသားေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Hexadecimal တန္ဖိုးကိုရရွိမွာျဖစ္ပါတရ္ဗ်ာ။
ဒီ Conversion ေလးရဲ႕ GUI ကိုေတာ့ ေအာက္ပါအတိုင္း ခ်ထားပါတရ္ဗ်။ မိတ္ေဆြတို႔အေနနဲ႔ ႀကိဳက္ႏွစ္သတ္ရာ ပံုစံ Tool ေတြနဲ႔ ဖန္တီးယူႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;

namespace NumberTypeConverter
{
    public partial class BinaryConversion : Form
    {
        public BinaryConversion()
        {
            InitializeComponent();
        }

        public string BinaryToHexadecimal(int Bi)
        {
            int[] HexConstant = { 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 };
            int remainder, count = 0;
            char[] arr = new char[32];
            while (Bi != 0)
            {
                remainder = Bi % 10000;
                for (int i = 0; i <= HexConstant.Length - 1; i++)
                {
                    if (HexConstant[i] == remainder)
                    {
                        if (i > 9 && i < 16)
                        {
                            /* A-F character constant */
                            arr[count++] = (char)((i - 10) + 'A');
                        }
                        else
                        {
                            /* 0-9 integer constant */
                            arr[count++] = (char)(i + '0');
                        }
                    }
                }
                Bi /= 10000;
            }
            //Revert array
            string output = "";
            for (int i = count - 1; i >= 0; i--)
            {
                output += arr[i];
            }
            return output;
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {
            txtHexadecimal.Text = BinaryToHexadecimal(int.Parse(txtBinary.Text));
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtBinary.Clear();
            txtHexadecimal.Clear();
            txtBinary.Focus();
        }
    }
}
အေသးစိတ္နားလည္ႏိုင္ဖို႔အတြက္ က်ေနာ္ Trace လုိက္ျပပါ့မရ္။
Binary = 00011011, Hex=? 
Loop1 => (00011011 != 0) => true  
         Remainder = 00011011 % 10000 = 1011  
         For(loop(11)== 1011) => true  
               arr[0] =  (char)((11 - 10) + 'A') = 1 + 65 = 66(B)  
         Binary = 00011011 / 10000 = 1 
Loop2 => (1 != 0) => true  
         Remainder = 1 % 10000 = 1  
         For(loop(1)==1) => true  
               arr[1] = (char)(1+ '0') = 1+48 =49(1)  
         Binary = 1  / 10000 = 0 
Loop3 => (0 != 0) => false 
           arr[] = B1 
so, output = 1B
ဒီေလာက္ဆိုရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Getting 'char' method ေလးကို အသံုးျပဳၿပီး Binary Number ကေနၿပီး Hexadecimal Number အျဖစ္ ေျပာင္းလဲႏိုင္ၿပီလို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment