2013年9月12日 星期四

C# CRC32

    public class Crc32 
    {
        uint[] table;
        public uint Checksum(byte[] bytes) 
        {
            uint crc = 0xffffffff;
            for(int i = 0; i < bytes.Length; ++i) 
            {
                byte index = (byte)(((crc) & 0xff) ^ bytes[i]);
                crc = (uint)((crc >> 8) ^ table[index]);
            }
            return ~crc;
        }

        public byte[] ChecksumBytes(byte[] bytes) 
        {
            return BitConverter.GetBytes(Checksum(bytes));
        }

        public Crc32() 
        {
            uint Q= 0x12345678;
            table = new uint[256];
            uint temp = 0;
            for(uint i = 0; i < table.Length; ++i) 
            {
                temp = i;
                for(int j = 8; j > 0; --j) 
                {
                    if((temp & 1) == 1) 
                    {
                        temp = (uint)((temp >> 1) ^ Q);
                    }
                    else 
                    {
                        temp >>= 1;
                    }
                }
                table[i] = temp;
            }
        }
    }

2013年7月10日 星期三

c# real-time

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;

namespace Test_time
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();

            for (int i = 0; i < 10; ++i)
            {
                sw.Reset();
                sw.Start();
                Thread.Sleep(50);
                sw.Stop();

                Console.WriteLine("(default) Slept for " + sw.ElapsedMilliseconds);

                TimeBeginPeriod(1);
                sw.Reset();
                sw.Start();
                Thread.Sleep(50);
                sw.Stop();
                TimeEndPeriod(1);

                Console.WriteLine("(highres) Slept for " + sw.ElapsedMilliseconds + "\n");
            }
        }

        [DllImport("winmm.dll", EntryPoint="timeBeginPeriod", SetLastError=true)]
        private static extern uint TimeBeginPeriod(uint uMilliseconds);

        [DllImport("winmm.dll", EntryPoint="timeEndPeriod", SetLastError=true)]
        private static extern uint TimeEndPeriod(uint uMilliseconds);
    }
}

2013年6月18日 星期二

Windows 關閉「資料執行防止」(DEP)

Windows 關閉「資料執行防止」(DEP)

modify c:\boot.ini /noexecute=optin OptIn:預設值,保護基本的 Windows 程式和服務
OptOut:針對所有程式啟用 DEP (可定義例外清單)
AlwaysOn:針對所有程式啟用 DEP (無法定義例外清單)
AlwaysOff:關閉 DEP 功能