2016년 12월 5일 월요일

[c#] Function Factory 예제


스트림 바이트별로 읽는 함수

------

public Dictionary> ReaderDict( Stream stream )
        {
            Dictionary < string, Func > output = new Dictionary>();

            Func readbytearr =  input  =>
            {
                stream.Read(input,0,input.Length);
                return input;
            };

            Func ToByte     = () => (byte)stream.ReadByte();
            Func ToInt      = () => BitConverter.ToInt32 ( readbytearr(new byte[4]),0 );
            Func ToLong     = () => BitConverter.ToInt64 ( readbytearr(new byte[8]),0 );
            Func ToFloat    = () => BitConverter.ToSingle( readbytearr(new byte[4]),0 );

            byte[] tempman = new byte[2];

            output.Add( "byte" , ToByte );
            output.Add( "int" , ToInt );
            output.Add( "long" , ToLong );
            output.Add( "float" , ToFloat );

            return output;
        }

-------

읽는 예제가 (reader 는 위의 읽는 딕셔너리 이름)
for ( int i = 0 ; i < 3 ; i++ )
            {
                Console.WriteLine( "X"           +"="+ reader["int"]() );
                Console.WriteLine( "Y"           +"="+ reader["int"]() );
                Console.WriteLine( "ByteOffset"  +"="+ reader["long"]() );
                Console.WriteLine( "Length"      +"="+ reader["int"]());
                Console.WriteLine( "Width"       +"="+ reader["int"]());
                Console.WriteLine( "Height"      +"="+ reader["int"]() );
                Console.WriteLine( "RealX"       +"="+ reader["float"]());
                Console.WriteLine( "RealY"       +"="+ reader["float"]());
                Console.WriteLine( "RealW"       +"="+ reader["float"]());
                Console.WriteLine( "RealH"       +"="+ reader["float"]() );
                Console.ReadLine();
            }

댓글 없음:

댓글 쓰기