본문 바로가기
C#

[C#] Convert

by DANEW 2023. 8. 15.

Convert 클래스

- 기반 형식(base Type) : IConvertible 인터페이스를 명시적으로 구현

 * bool, char, string, System.DateTime, System.DateTimeOffset

 * C#의 모든 수치 형식

 

- Convert는 모든 기반 형식에서 다른 모든 기반 형식으로의 변환을 수행하는 메서드들을 정의

- 전체적으로는 별로 쓸모가 없다... 어차피 캐스팅 하니까...

 

 

실수에서 정수로의 반올림 변환

- 명시적 캐스팅: 절단(버림) - 유손실 변환

- To(정수-형식): 은행원 반올림(banker's rounding, 가장 가까운 짝수 정수로 대응)

- Math.Round: 은행원 반올림, 중간 반올림(midpoint rounding, 5 미만은 0, 5 이상은 1으로 대응) 선택 가능

- 어... 결국 Math.Round 쓰면 되니까 의미가 없네?

 

2, 8, 16진수 파싱

 - To(정수-형식) 메서드 중에 기수를 파싱하는 버전이 있음.

 - 기수로 2, 8, 10, 16 사용 가능

 

동적 변환

- 런타임 시점에서 형식을 결정하거나 변동시키고 싶을 경우

- 주 사용처

 * 여러가지 형식을 지원하는 역직렬화기(deserializer)

 * 임의의 열거형을 바탕 정수 형식으로 변환

- 서식 문자열이나 파싱 플래그 지정이 불가능함

 

반응형

Base64 변환

- Base64

 * 비트맵 같은 이진 자료를 XML 파일이나 이메일 메시지 같은 텍스트 문서에 내장 할 경우 사용

 * 이진 자료를 ASCII 문자 집합의 문자 64개를 이용해서 읽기 가능 텍스트로 부호화 함

- ToBase64String, FromBase64String

 

using System;
using System.Text;
 
namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            // 실수에서 정수로의 반올림 변환
            double[] arr = new double[10];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = i + 0.5;
            }
 
            int pad = 11;
 
            Console.Write("original".ToString().PadLeft(pad));
            Console.Write("casting".ToString().PadLeft(pad));
            Console.Write("Convert".ToString().PadLeft(pad));
            Console.Write("Round".ToString().PadLeft(pad));
            Console.Write("Round(AFZ)".ToString().PadLeft(pad));
            Console.WriteLine();
 
            foreach (var item in arr)
            {
                // 대조군
                Console.Write(item.ToString().PadLeft(pad));
 
                // 명시적 캐스팅
                Console.Write(((int)item).ToString().PadLeft(pad));
 
                // Convert
                Console.Write(Convert.ToInt32(item).ToString().PadLeft(pad));
 
                // Math.Round
                Console.Write(Math.Round(item).ToString().PadLeft(pad));
 
                // AFZ
                Console.Write(Math.Round(item, MidpointRounding.AwayFromZero).ToString().PadLeft(pad));
                Console.WriteLine();
            }
            Console.WriteLine();
 
 
 
            // 2, 8, 16진수 파싱            
            Console.WriteLine(Convert.ToInt32("1E", 16));
            Console.WriteLine(Convert.ToInt32("77", 8));
            Console.WriteLine(Convert.ToInt32("10101011", 2));
            Console.WriteLine();
 
 
 
            // 동적 변환
            Type targetType = typeof(int);
 
            object source = "42";
            Console.WriteLine(source);
            Console.WriteLine(source.GetType());
 
            object result = Convert.ChangeType(source, targetType);
            Console.WriteLine(result);
            Console.WriteLine(result.GetType());
            Console.WriteLine();
 
 
 
            // Base64 변환
            string str = "Heroes of the storm!";
            byte[] utf16bytes = Encoding.UTF8.GetBytes(str);
            string base64 = Convert.ToBase64String(utf16bytes);
 
            Console.WriteLine(str);
            foreach (var item in utf16bytes)
            {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();
            Console.WriteLine(base64);
 
            byte[] bytesFromBase64 = Convert.FromBase64String(base64);
            string str2 = Encoding.UTF8.GetString(bytesFromBase64);
 
            foreach (var item in bytesFromBase64)
            {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();
            Console.WriteLine(str2);
        }        
    }
}

 

 

 

반응형

'C#' 카테고리의 다른 글

[C#] Complex  (1) 2023.08.19
[C#] BigInteger  (1) 2023.08.18
[C#] BitConverter  (1) 2023.08.17
[C#] XmlConvert  (1) 2023.08.16
[C#] 서식화(Formatting)와 파싱(Parsing)  (1) 2023.08.14
[C#] 표준 서식 문자열과 파싱 플래그  (1) 2023.08.13
[C#] Time​Zone​Info.​Adjustment​Rule & Time​Zone​Info.​Transition​Time  (1) 2023.08.12
[C#] TimeZoneInfo  (1) 2023.08.11