[C#] string <-> byte 변환하기 (16진수)

이상윤·2022년 9월 29일
0

c#

목록 보기
1/2
post-thumbnail

string을 16진수 형식의 byte로 바꾸거나
byte를 16진수 형식의 string으로 바꾸고 싶은 경우가 많은데,
매번 찾아보게 되어서 정리를 하게 되었다.

1. string을 그대로 16진수 형식으로 변환하기

(단, string의 길이는 2이다.)

static void Main(string[] args)
{
    string str = "79";
    byte dec, hex;

    // 10진수
    dec = Convert.ToByte(str);
    Console.WriteLine(dec);		// 79로 해석
    
    dec = byte.Parse(str);
    Console.WriteLine(dec);     // 79로 해석

    // 16진수
    hex = Convert.ToByte(str, 16);
    Console.WriteLine(hex);		// 0x79로 해석 -> 121
    
    hex = byte.Parse(str, System.Globalization.NumberStyles.HexNumber);
    Console.WriteLine(hex);     // 0x79로 해석 -> 121
}

output

79
79
121
121

2. string의 각 글자를 16진수 형식으로 변환

    
static void Main(string[] args)
{
    string str = "Hello";
    byte[] hex_bytes;

    hex_bytes = Encoding.Default.GetBytes(str);

    foreach(byte hb in hex_bytes)
    	Console.WriteLine(hb);
}

ASCII 코드 표에 의하면 아래와 같다.
'H' = 0x48 (72)
'e' = 0x65 (101)
'l' = 0x6C (108)
'o' = 0x6F (111)

output

72
101
108
108
111

Console.WriteLine(hb);을 거치면서 10진수로 변환 되어 출력된다.
따라서 byte를 다시 16진수 형식의 string으로 출력해보자

3. 1 byte를 16진수 형식의 string으로 출력하기

static void Main(string[] args)
{
    byte hex = 0x79;

    Console.WriteLine(String.Format("{0:X2}", hex));
    Console.WriteLine(Convert.ToString(hex, 16));
    Console.WriteLine(hex.ToString("X2"));
}

output

79
79
79

4-1. byte배열을 String으로 변환

static void Main(string[] args)
{
    string str = "Hello";
    byte[] bytes;
    bytes = Encoding.Default.GetBytes(str);

    Console.WriteLine(Encoding.Default.GetString(bytes));
}

output

Hello

4-2. byte배열을 16진수 형식의 String으로 변환

static void Main(string[] args)
{
    string str = "Hello";
    byte[] bytes;
    bytes = Encoding.Default.GetBytes(str);

    Console.WriteLine(BitConverter.ToString(bytes));
    Console.WriteLine(BitConverter.ToString(bytes).Replace("-",""));
}

BitConverter.ToString(bytes)에서 "-" 문자가 섞여있다.

output

48-65-6C-6C-6F
48656C6C6F

0개의 댓글