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"