domingo, 1 de setembro de 2013

String para Hexadecimal com C#


A base hexadecimal consiste em contar numa base 16, é por isso que, além dos 10 primeiros números, decidiu-se acrescentar as 6 primeiras letras : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.



Base decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Base hexadecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

Vamos a conversão utilizando o C#:
        static void Main(string[] args)
        {
            // Sua string
            string s = "Edgar";
            // Futuro codigo Hexa...
            string hex = "";

            // Percorrer sua string e transforma-la em Hexa
            foreach (char c in s)
            {
                hex += ((int)c).ToString("x") + " ";
            }

            Console.WriteLine(s + " em Hexadecimal seria: " + hex.Trim());
        }
Neste caso nossa string ficou assim:
E
D
G
A
r
45
64
67
61
72

Agora vou mostrar como voltar de hexa para string, veja abaixo:
    class Program
    {
        static void Main(string[] args)
        {
            // Sua string
            string minhaString = "Edgar";
            // Futuro codigo Hexa...
            string hexadecimal = "";

            // Percorrer sua string e transforma-la em Hexa
            foreach (char c in minhaString)
            {
                hexadecimal += ((int)c).ToString("x") + " ";
            }
            // Exibir codigo em Hexa
            Console.WriteLine(minhaString + " em Hexadecimal seria: " + hexadecimal.Trim());


            // Voltar de Hexa para String
            byte[] data = FromHex(hexadecimal.ToString());
            string s = Encoding.ASCII.GetString(data); // GatewayServer
           
            // Exibir conversão
            Console.WriteLine(hexadecimal.ToString() + " voltando de hexa, ficamos com : " + s.ToString());
        }

        public static byte[] FromHex(string hex)
        {
            hex = hex.Replace(" ", "");
            byte[] raw = new byte[hex.Length / 2];
            for (int i = 0; i < raw.Length; i++)
            {
                raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
            }
            return raw;
        }
    }
Bons estudos

0 comentários:

Postar um comentário