본문 바로가기
C#

[C#] Best Way Byte To Hex

by Jcoder 2021. 4. 11.

https://forum.dotnetdev.kr/t/byte-hex-16/632/4?u=tjdskaqks

 

Byte 배열을 Hex(16진수) 문자열로 변환하는 방법

.NET Core 5 + Benchmark 테스트 결과입니다. Score: 1690.9 / 186.5 = 9.066487935656836 변환 코드 const string table = "0123456789ABCDEF"; return string.Create(Size * 2, _buffer, static(span, buffer) => { for (int i = 0; i < Size; i++) { span[0] =

forum.dotnetdev.kr

 

문제] 8192 * 10000 바이트 배열을 난수로 생성 후, 이를 16진수 HEX 문자열로 변환한다.
최종 스코어는 다음과 같이 한다.

a = BitConverter.ToString(buffer).Replace("-", “”) 의 소요 시간
b = 자신이 만든 루틴의 소요 시간

score = a / b;

 

      public class ByteHex16
      {
         private const int Size = 8192 * 10000; // 8192 * 10000 바이트 배열을 난수로 생성

         private byte[] _buffer;

         public void Setup()
         {
            _buffer = new byte[Size]; // 8192 * 10000 바이트 배열을 난수로 생성
            new Random().NextBytes(_buffer);
         }

         public string BitConverter()
         {
            return System.BitConverter.ToString(_buffer).Replace("-", "");
         }

         public string EvanChoi()
         {
            const string table = "0123456789ABCDEF";

            return string.Create(Size * 2, _buffer, static (span, buffer) =>
            {
               for (int i = 0; i < Size; i++)
               {
                  span[0] = table[(buffer[i] & 0xF0) >> 4];
                  span[1] = table[buffer[i] & 0x0F];
                  span = span.Slice(2);
               }
            });
         }
      }

 

결과

 

1. .NET 5.0

2. Relese/Any CPU