System.Convert 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

정적 Convert 클래스에는 .NET의 기본 데이터 형식으로의 변환을 지원하는 데 주로 사용되는 메서드가 포함되어 있습니다. 지원되는 기본 형식은 Boolean,Char, ,SByte, Int16Byte, Int32, Int64UInt16, DoubleUInt32SingleDecimalUInt64DateTime , 및 .String 또한 클래스에는 Convert 다른 종류의 변환을 지원하는 메서드가 포함되어 있습니다.

기본 형식과 기본 형식의 변환

모든 기본 형식을 다른 모든 기본 형식으로 변환하는 변환 메서드가 있습니다. 그러나 특정 변환 메서드에 대한 실제 호출은 런타임에 기본 형식의 값과 대상 기본 형식에 따라 5가지 결과 중 하나를 생성할 수 있습니다. 이 다섯 가지 결과는 다음과 같습니다.

  • 변환이 없습니다. 이는 형식에서 자체로 변환하려고 할 때 발생합니다(예: 형식 Int32인수를 사용하여 호출Convert.ToInt32(Int32)). 이 경우 메서드는 단순히 원래 형식의 인스턴스를 반환합니다.

  • InvalidCastException입니다. 특정 변환이 지원되지 않는 경우에 발생합니다. InvalidCastException 다음 변환에 대해 throw됩니다.

  • FormatException. 문자열이 적절한 형식이 아니므로 문자열 값을 다른 기본 형식으로 변환하는 시도가 실패할 때 발생합니다. 다음 변환에 대해 예외가 throw됩니다.

    • 값으로 변환 Boolean 할 문자열이 같지 Boolean.TrueStringBoolean.FalseString않거나 .
    • 값으로 변환할 문자열은 Char 여러 문자로 구성됩니다.
    • 숫자 형식으로 변환할 문자열은 유효한 숫자로 인식되지 않습니다.
    • 변환 DateTime 할 문자열은 유효한 날짜 및 시간 값으로 인식되지 않습니다.
  • 성공적인 변환입니다. 이전 결과에 나열되지 않은 두 개의 서로 다른 기본 형식 간의 변환의 경우 모든 확대 변환과 데이터 손실을 초래하지 않는 모든 축소 변환이 성공하고 메서드는 대상 기본 형식의 값을 반환합니다.

  • OverflowException입니다. 이는 축소 변환으로 인해 데이터가 손실되는 경우에 발생합니다. 예를 들어 값이 10000 Byte 인 인스턴스를 형식 OverflowException 으로 변환 Int32 하려고 하면 10000이 데이터 형식 범위를 Byte 벗어났기 때문입니다.

숫자 형식을 변환하면 전체 자릿수가 손실되는 경우(즉, 유의 자릿수가 가장 적게 손실됨) 예외가 throw되지 않습니다. 그러나 결과가 특정 변환 메서드의 반환 값 형식으로 나타낼 수 있는 것보다 큰 경우 예외가 throw됩니다.

예를 들어 a가 Double 변환 Single될 때 정밀도 손실이 발생할 수 있지만 예외는 throw되지 않습니다. 그러나 크기 Double 가 너무 커서 표시 Single할 수 없는 경우 오버플로 예외가 throw됩니다.

10진수가 아닌 숫자

이 클래스에는 Convert 정수 값을 소수점이 아닌 문자열 표현으로 변환하고 소수가 아닌 숫자를 나타내는 문자열을 정수 값으로 변환하기 위해 호출할 수 있는 정적 메서드가 포함되어 있습니다. 이러한 각 변환 메서드에는 숫자 시스템, 이진(base 2), 8진수(base 8), 16진수(base 16) 및 10진수(base 10)를 지정할 수 있는 인수가 포함 base 됩니다. 각 CLS 규격 기본 정수 형식을 문자열로 변환하는 메서드 집합과 문자열을 각 기본 정수 계열 형식으로 변환하는 메서드 집합이 있습니다.

다음 예제에서는 지원되는 모든 숫자 형식의 Int16.MaxValue 문자열로 값을 변환합니다. 그런 다음 문자열 값을 값으로 Int16 다시 변환합니다.

using System;

public class Example
{
   public static void Main()
   {
      int[] baseValues = { 2, 8, 10, 16 };
      short value = Int16.MaxValue;
      foreach (var baseValue in baseValues) {
         String s = Convert.ToString(value, baseValue);
         short value2 = Convert.ToInt16(s, baseValue);

         Console.WriteLine("{0} --> {1} (base {2}) --> {3}",
                           value, s, baseValue, value2);
      }
   }
}
// The example displays the following output:
//     32767 --> 111111111111111 (base 2) --> 32767
//     32767 --> 77777 (base 8) --> 32767
//     32767 --> 32767 (base 10) --> 32767
//     32767 --> 7fff (base 16) --> 32767
open System

let baseValues = [ 2; 8; 10; 16 ]
let value = Int16.MaxValue
for baseValue in baseValues do
    let s = Convert.ToString(value, baseValue)
    let value2 = Convert.ToInt16(s, baseValue)
    printfn $"{value} --> {s} (base {baseValue}) --> {value2}"

// The example displays the following output:
//     32767 --> 111111111111111 (base 2) --> 32767
//     32767 --> 77777 (base 8) --> 32767
//     32767 --> 32767 (base 10) --> 32767
//     32767 --> 7fff (base 16) --> 32767
Module Example2
    Public Sub Main()
        Dim baseValues() As Integer = {2, 8, 10, 16}
        Dim value As Short = Int16.MaxValue
        For Each baseValue In baseValues
            Dim s As String = Convert.ToString(value, baseValue)
            Dim value2 As Short = Convert.ToInt16(s, baseValue)

            Console.WriteLine("{0} --> {1} (base {2}) --> {3}",
                           value, s, baseValue, value2)
        Next
    End Sub
End Module
' The example displays the following output:
'     32767 --> 111111111111111 (base 2) --> 32767
'     32767 --> 77777 (base 8) --> 32767
'     32767 --> 32767 (base 10) --> 32767
'     32767 --> 7fff (base 16) --> 32767

사용자 지정 개체에서 기본 형식으로 변환

이 메서드는 기본 형식 Convert 간의 변환을 지원하는 것 외에도 모든 사용자 지정 형식을 모든 기본 형식으로 변환할 수 있도록 지원합니다. 이렇게 하려면 사용자 지정 형식은 구현 형식을 각 기본 형식으로 변환하는 메서드를 정의하는 인터페이스를 구현 IConvertible 해야 합니다. 특정 형식에서 지원되지 않는 변환은 .를 InvalidCastExceptionthrow해야 합니다.

메서드가 ChangeType 첫 번째 매개 변수로 사용자 지정 형식을 전달하거나 Type 메서드(예: Convert.ToInt32(Object) 사용자 지정 형식의 인스턴스를 첫 번째 매개 변수로 호출하거나 Convert.ToDouble(Object, IFormatProvider) 전달한 경우Convert.To) Convert 메서드는 변환을 수행하기 위해 사용자 지정 형식의 IConvertible 구현을 호출합니다. 자세한 내용은 .NET의 형식 변환을 참조하세요.

문화권별 서식 지정 정보

모든 기본 형식 변환 메서드와 ChangeType 메서드에는 형식의 매개 변수가 있는 오버로드가 포함됩니다 IFormatProvider. 예를 들어 메서드에는 Convert.ToBoolean 다음 두 오버로드가 있습니다.

매개 변수는 IFormatProvider 변환 프로세스를 지원하기 위해 문화권별 서식 정보를 제공할 수 있습니다. 그러나 대부분의 기본 형식 변환 메서드에서는 무시됩니다. 다음 기본 형식 변환 메서드에서만 사용됩니다. 인수가 nullIFormatProvider 이러한 메서드 CultureInfo 에 전달되면 현재 문화권을 나타내는 개체가 사용됩니다.

  • 값을 숫자 형식으로 변환하는 메서드입니다. 매개 변수는 IFormatProvider 형식 StringIFormatProvider.의 매개 변수가 있는 오버로드에서 사용됩니다. 또한 형식 Object 의 매개 변수가 있는 오버로드에서 사용되며 IFormatProvider 개체의 런타임 형식이 String.

  • 값을 날짜 및 시간으로 변환하는 메서드입니다. 매개 변수는 IFormatProvider 형식 StringIFormatProvider.의 매개 변수가 있는 오버로드에서 사용됩니다. 또한 형식 Object 의 매개 변수가 있는 오버로드에서 사용되며 IFormatProvider 개체의 런타임 형식이 String.

  • Convert.ToString 매개 변수를 포함하고 IFormatProvider 숫자 값을 문자열로 변환하거나 값을 문자열로 변환하는 DateTime 오버로드에 의해.

그러나 구현하는 모든 사용자 정의 형식은 IConvertible 매개 변수를 IFormatProvider 사용할 수 있습니다.

Base64 인코딩

Base64 인코딩은 이진 데이터를 문자열로 변환합니다. base-64 숫자로 표현된 데이터는 7비트 문자만 전송할 수 있는 데이터 채널을 통해 쉽게 전달할 수 있습니다. 클래스에는 Convert base64 인코딩을 지원하는 다음 메서드가 포함됩니다. 메서드 집합은 밑이 64자리 문자로 구성된 유니코드 문자 배열에서 바이트 배열을 바이트 배열과 바이트 String 간의 변환을 지원합니다.

  • ToBase64String- 바이트 배열을 base64로 인코딩된 문자열로 변환합니다.
  • ToBase64CharArray- 바이트 배열을 base64로 인코딩된 문자 배열로 변환합니다.
  • FromBase64String- base64로 인코딩된 문자열을 바이트 배열로 변환합니다.
  • FromBase64CharArray- base64로 인코딩된 문자 배열을 바이트 배열로 변환합니다.

기타 일반 변환

다른 .NET 클래스를 사용하여 클래스의 정적 메서드에서 지원되지 않는 일부 변환을 Convert 수행할 수 있습니다. 여기에는 다음이 포함됩니다.

  • 바이트 배열로 변환

    이 클래스는 BitConverter 기본 숫자 형식(포함 Boolean)을 바이트 배열로 변환하고 바이트 배열에서 기본 데이터 형식으로 다시 변환하는 메서드를 제공합니다.

  • 문자 인코딩 및 디코딩

    Encoding 클래스 및 파생 클래스(예: UnicodeEncodingUTF8Encoding)는 문자 배열 또는 문자열을 인코딩하는 메서드(즉, 특정 인코딩에서 바이트 배열로 변환)하고 인코딩된 바이트 배열(즉, 바이트 배열을 UTF16으로 인코딩된 유니코드 문자로 다시 변환)을 디코딩하는 메서드를 제공합니다. 자세한 내용은 .NET의 문자 인코딩을 참조하세요.

예제

다음 예제에서는 클래스의 변환 메서드 Convert 중 일부(예 ToInt32: , ToBooleanToString)를 보여 줍니다.

double dNumber = 23.15;

try {
    // Returns 23
    int    iNumber = System.Convert.ToInt32(dNumber);
}
catch (System.OverflowException) {
    System.Console.WriteLine(
                "Overflow in double to int conversion.");
}
// Returns True
bool   bNumber = System.Convert.ToBoolean(dNumber);

// Returns "23.15"
string strNumber = System.Convert.ToString(dNumber);

try {
    // Returns '2'
    char chrNumber = System.Convert.ToChar(strNumber[0]);
}
catch (System.ArgumentNullException) {
    System.Console.WriteLine("String is null");
}
catch (System.FormatException) {
    System.Console.WriteLine("String length is greater than 1.");
}

// System.Console.ReadLine() returns a string and it
// must be converted.
int newInteger = 0;
try {
    System.Console.WriteLine("Enter an integer:");
    newInteger = System.Convert.ToInt32(
                        System.Console.ReadLine());
}
catch (System.ArgumentNullException) {
    System.Console.WriteLine("String is null.");
}
catch (System.FormatException) {
    System.Console.WriteLine("String does not consist of an " +
                    "optional sign followed by a series of digits.");
}
catch (System.OverflowException) {
    System.Console.WriteLine(
    "Overflow in string to int conversion.");
}

System.Console.WriteLine("Your integer as a double is {0}",
                         System.Convert.ToDouble(newInteger));
let dNumber = 23.15

try
    // Returns 23
    Convert.ToInt32 dNumber
    |> ignore
with :? OverflowException ->
    printfn "Overflow in double to int conversion."
// Returns True
let bNumber = System.Convert.ToBoolean dNumber

// Returns "23.15"
let strNumber = System.Convert.ToString dNumber

try
    // Returns '2'
    System.Convert.ToChar strNumber[0]
    |> ignore
with
| :? ArgumentNullException ->
    printfn "String is null"
| :? FormatException ->
    printfn "String length is greater than 1."

// System.Console.ReadLine() returns a string and it
// must be converted.
let newInteger =
    try
        printfn "Enter an integer:"
        System.Convert.ToInt32(Console.ReadLine())
    with
    | :? ArgumentNullException ->
        printfn "String is null."
        0
    | :? FormatException ->
        printfn "String does not consist of an optional sign followed by a series of digits."
        0
    | :? OverflowException ->
        printfn "Overflow in string to int conversion."
        0

printfn $"Your integer as a double is {System.Convert.ToDouble newInteger}"
Dim dNumber As Double
dNumber = 23.15

Try
   ' Returns 23
   Dim iNumber As Integer
   iNumber = System.Convert.ToInt32(dNumber)
Catch exp As System.OverflowException
   System.Console.WriteLine("Overflow in double to int conversion.")
End Try

' Returns True
Dim bNumber As Boolean
bNumber = System.Convert.ToBoolean(dNumber)

' Returns "23.15"
Dim strNumber As String
strNumber = System.Convert.ToString(dNumber)

Try
   ' Returns '2'
   Dim chrNumber As Char
   chrNumber = System.Convert.ToChar(strNumber.Chars(1))
Catch exp As System.ArgumentNullException
   System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
   System.Console.WriteLine("String length is greater than 1.")
End Try

' System.Console.ReadLine() returns a string and it
' must be converted.
Dim newInteger As Integer
newInteger = 0
Try
   System.Console.WriteLine("Enter an integer:")
   newInteger = System.Convert.ToInt32(System.Console.ReadLine())
Catch exp As System.ArgumentNullException
   System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
   System.Console.WriteLine("String does not consist of an " + _
       "optional sign followed by a series of digits.")
Catch exp As System.OverflowException
   System.Console.WriteLine("Overflow in string to int conversion.")
End Try

System.Console.WriteLine("Your integer as a double is {0}", _
                         System.Convert.ToDouble(newInteger))