TIL

[C#] byte와 16진수 문자열 간의 변환

Jenner 2025. 3. 31. 12:13

 

 

 

(1) 1바이트 - 16진수 문자열 변환 

 

ToString("X2");
// (1) 바이트를 16진수 문자열로 변환하는 방법
byte singleByte = 0xAD;
string hexValue = singleByte.ToString("X2"); // 결과: "AD"
Console.WriteLine($"바이트 값 {singleByte}의 16진수 표현: {hexValue}");

(2) 바이트배열 - 16진수 문자열로 변환

1. 첫번째 예제 

StringBuilder를 활용하여 foreach반복문에서 byteArray를 16진수 문자열로 변환 후 StringBuilder에 Append

 

2. 두 번째 예제 

Array.ConvertAll과 String.Concat을 활용하여 각 Array의 요소를 16진수 문자열로 변환 후 문자열 반환

 

// (2) 바이트 배열을 16진수 문자열로 변환하는 방법
byte[] byteArray = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"의 바이트 값
StringBuilder hexBuilder = new StringBuilder();
foreach (byte b in byteArray)
{
    hexBuilder.Append(b.ToString("X2"));
}
string hexString = hexBuilder.ToString(); // 결과: "48656C6C6F"
Console.WriteLine($"바이트 배열의 16진수 표현: {hexString}");

//혹은 

byte[] byteArray1 = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"의 바이트 값
string h = string.Concat(Array.ConvertAll(byteArray1, byt => byt.ToString("X2")));
Console.WriteLine($"바이트 배열의 16진수 표현: {h}");

 

 

(3) 16진수 문자열 - 바이트로 변환 

byte.Parse를 활용하여 문자열을 HexNumber로 변환

byte.Parse(hexByte, System.Globalization.NumberStyles.HexNumber);
// (3) 16진수 문자열을 바이트로 변환하는 방법
string hexByte = "7A";
byte resultByte = byte.Parse(hexByte, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine($"16진수 {hexByte}의 바이트 값: {resultByte}"); // 결과: 122

 

(4) 16진수 문자열 - 바이트 배열로 변환 

16진수 문자열 한개당 4비트 

그러므로 바이트 배열의 길이는 hexData.length / 2

for문으로 루프를 돌며 각 두 문자열씩 추출하여 byteValue를 HexNumber로 파싱 후 resultBytes 배열 원소에 할당

// (4) 16진수 문자열을 바이트 배열로 변환하는 방법
string hexData = "48656C6C6F"; // "Hello"
byte[] resultBytes = new byte[hexData.Length / 2];

for (int i = 0; i < resultBytes.Length; i++)
{
    string byteValue = hexData.Substring(i * 2, 2);
    resultBytes[i] = byte.Parse(byteValue, System.Globalization.NumberStyles.HexNumber);
}

// 결과 확인 (ASCII 문자열로 변환)
string resultText = System.Text.Encoding.ASCII.GetString(resultBytes);
Console.WriteLine($"16진수 문자열 {hexData}의 ASCII 텍스트: {resultText}"); // 결과: "Hello"