열거형은 C/C++과 같이 enum 키워드로 정의 할 수 있다. 하지만 다른점이 몇가지 있다.
1. 타입을 정의 하는 문장은 명령이 아니기 때문에 열거형 정의문 뒤에 세미콜론을 붙이지 않는다.
2. 열거멤버 자체를 곧바로 사용할 수 없으며 반드시 열거타입.멤버 식으로 사용해야 한다.
열거형 정의 방법
enum Origin { East, West, South, North }
enum Origin { East = 1, West = 5, South, North }
// 값이 생략된 멤버는 자동적으로 이전멤버의 값보다 1 더 큰 값을 갖는다.
열거형의 특징
열거형은 내부적으로 정수형으로 저장되는데 별다른 지정이 없으면 4바이트의 int 타입을 가진다. int 타입의 열거형은 최대 40억개의 열거 멤버를 정의할 수 있어 크기가 충분하다. 그러나 너무 충분해서 기억장소가 다소 낭비되는데 선언할 때 열거타입 이름 다음에 내부 저장 타입을 지정하면 용량을 다소 아낄 수 있다.
enum Origin : byte { East, West, South, North }
열거형 사용법
using System;
class CSTest
{
enum Origin { East, West, South, North }
static void Main()
{
Origin Turn;
Turn = Origin.South;
Console.WriteLine(Turn);
int Value1 = (int)Turn;
int Value2 = (int)Origin.South;
Console.WriteLine(Value1);
Console.WriteLine(Value2);
string name = Turn.ToString();
Console.WriteLine(name);
Turn = (Origin)Enum.Parse(typeof(Origin), "East");
Console.WriteLine(Turn);
}
}
C#에서 UTF-8과 EUC-KR을 바이트코드로 변환하는 방법입니다.
항상 개발을 하거나, 혹은 프로그래밍 공부를 하다보면 한글을 어떻게 표현하고, 어떻게 조작해야하는지 고민할때가 많습니다.
C#에서도 예외는 아니었는데, 웹브라우저 컨트롤을 쓰다가 한글이 포함된 주소가 먹히지 않는 사이트를 발견하고, 삽질을 시작했더랬습니다...^^ 조금은 어렵게, 혹은 쉽게 문제를 해결하였습니다.
인터넷 주소를 살펴보면 한글이 바이트코드로 전달되는데, UTF-8로 전달될때가 있고, EUC-KR로 전달될때가 있어서
전달되는 바이트코드가 UTF-8인지 EUC-KR인지 아래의 예제를 사용해보시면 확인해보실 수 있습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Encoding
{
class Program
{
static void Main(string[] args)
{
string s = "김희선";
Console.WriteLine("원본문자열 : {0}", s);
// 코드페이지 번호는 http://msdn.microsoft.com/ko-kr/library/system.text.encoding.aspx 에서 확인하시면 됩니다.
int euckrCodepage = 51949;
// 인코딩을 편리하게 해주기 위해서 인코딩클래스 변수를 만듭니다.
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(euckrCodepage);
// 위에서 만든 변수를 이용하여 Byte의 배열로 문자열을 인코딩하여 얻는 부분입니다.
byte[] utf8Bytes = utf8.GetBytes(s);
Console.Write("UTF-8 : ");
foreach (byte b in utf8Bytes)
{
Console.Write("{0:X} ", b); // byte를 16진수로 표기합니다.
}
Console.Write("\n");
byte[] euckrBytes = euckr.GetBytes(s);
Console.Write("EUC-KR : ");
foreach (byte b in euckrBytes)
{
Console.Write("{0:X} ", b); // byte를 16진수로 표기합니다.
}
Console.Write("\n");
// 인코딩된것을 문자열로 변환하기
string decodedStringByEUCKR = euckr.GetString(euckrBytes);
string decodedStringByUTF8 = utf8.GetString(utf8Bytes);
Console.WriteLine("EUC-KR로 디코딩된 문자열 : " + decodedStringByEUCKR);
Console.WriteLine("UTF-8로 디코딩된 문자열 : " + decodedStringByUTF8);
}
}
}