2 Ağustos 2018

Hexadecimal

using System;
namespace HexadecimalDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             16 TABANINDA Kİ SAYILARA DENİR
                16 tabanında olduğu için 10 rakama ilaveten 6 harf (A, B, C, D, E, F) eklenerek 16 basamağı için yeni rakamlar eklenir.
                Bunlar sırasıyla 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
                
            0x ile başlayarak hexadecimal formatında yazacağımızı bildiririz

            16 tabanında ki sayıları 10 luk tabana çevirmek
            y hexadecimal tabanları içerisinden seçilir
            1. basamak y * 16^0 = y * 1, 
            2. basamak y * 16^1 = y * 16,
            3. basamak y * 16^2 = y * 256,
            .
            .
            .
            n. basamak y * 16^(n-1)


            10 tabanında ki sayıları 16 tabanına çevirmek
            y 10 luk tabanda yazılan sayı
            1. basamak = y % 16 (birinci basamak kalan), y = y / 16 (yeni y bölüm)
            2. basamak = y % 16 , y = y / 16 
            .
            .
            .
            bu işlem bölüm 0 olana kadar devam eder.      
             */

            // C# otomatik olarak desteklemektedir.
            // Çıktısı 1 * 0 + 16 * 0 + 256 * 4 = 1024
            Console.WriteLine(0x400);

            // Tekrar HEX'e dönüştürmek için
            // Çıktısı 400
            Console.WriteLine(1024.ToString("X"));

            Console.WriteLine(HexToInt("0x400"));
            Console.WriteLine(IntToHex(1024));

        }
        

        //Basit bir 16 basamağı 10 luk basamağa çevirme algoritması
        static int HexToInt(string hex)
        {
            hex = hex.ToLower();
            hex = hex.Substring(hex.IndexOf('x') + 1);
            var numbs = "0123456789abcdef";
            var result = 0;
            for (int i = 0; i < hex.Length; i++)
            {
                result += numbs.IndexOf(hex[i]) * (int)(Math.Pow(16, (hex.Length - i - 1)));
            }
            return result;
        }
        //Basit bir 10 basamağı 16 lık basamağa çevirme algoritması
        static string IntToHex(int num)
        {
            var result = string.Empty;
            var numbs = "0123456789abcdef";
            while (num >= 16)
            {
                result = numbs[num % 16] + result;
                num /= 16;
            }
            result = numbs[num] + result;
            return result;
        }


    }
}