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#] TimeZoneInfo.AdjustmentRule & TimeZoneInfo.TransitionTime (1) | 2023.08.12 |
[C#] TimeZoneInfo (1) | 2023.08.11 |