打印数字屏幕

Posted on 2008-02-24 13:32  Humtong  阅读(246)  评论(0)    收藏  举报

输入 1234567890+-*/=() 得到
 
其实就是微机原理中的数码管
好辛苦……~~
class PrintNumbers
    {
        int ConvertToOX(char n)
        {
            switch (n)
            {
                case '1': return 0x4924;//100 1001 0010 0100
                case '2': return 0x73e7;//111 0011 1110 0111
                case '3': return 0x79e7;//111 1001 1110 0111
                case '4': return 0x49ed;//100  1001 1110 1101
                case '5': return 0x7bcf;//111 1011 1100 1111
                case '6': return 0x7bef;//111 1011 1100 1111
                case '7': return 0x4927;//100 1001 0010 0111
                case '8': return 0x7bef;//111 1011 1110 1111
                case '9': return 0x79ef;//111 1001 1110 1111
                case '0': return 0x7b6f; //111 1011 0110 1111
                case '+': return 0x25d2; //010 0101 1101 0010
                case '-': return 0x1c0; //000 0001 1100 0000
                case '*': return 0xaa8; //000 1010 1010 1000
                case '/': return 0x21c2; //010 0001 1100 0010
                case '=': return 0xe38; //000 1110 0011 1000
                case '(':return 0x4494;//100 0100 1001 0100
                case ')':return 0x1491;//001 0100 1001 0001
                default: return 0;
            }
        }

        void PrintNumber(string n)
        {
           
            int[] numbers = new int[n.Length];
            //init
            for(int i=0;i<n.Length;i++)
            {
                numbers[i]=ConvertToOX(n.ToCharArray()[i]);
            }
            int tooken = 0, ltooken = 0, rtooken = 0;           
            int kitooken = 0;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 5; i++)
            {
                //数字个数
                for (int j = 0; j <n.Length; j++)
                {
                    tooken = numbers[j] & 7;
                   
                    numbers[j] >>= 3;

                    //下面这段可以 将二进制首位互换
                    //ltooken=tooken >> 2;
                    //rtooken = tooken & 1;
                    //rtooken = (rtooken << 2) | 3;//x11
                    //ltooken = (ltooken >> 2) | 5;//11x
                    //tooken &= rtooken;
                    //tooken &= ltooken;

                    for (int k = 0; k < 3; k++)
                    {
                        kitooken=tooken&1;
                        tooken >>= 1;                       
                        sb.Append(kitooken==1?"@":" ");
                    }
                    sb.Append(" ");
                }
                sb.Append("\n");
            }
            Console.WriteLine(sb.ToString());
        }

        static void Main(string[] args)
        {
            PrintNumbers p = new PrintNumbers();
            p.PrintNumber("1234567890+-*/=()");
            p.PrintNumber("1+(2-3)*4+5=6");
        }
    }

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3