摩斯碼編解碼器

一、背景

  今天是1024,程序員節那就乾點兒程序員的事情。恰好,記得上高中時候,看過一部電影,無間道,裏邊黃秋生和梁朝偉用摩斯碼通訊,瞬間以爲好神祕,好帥氣。最近閒來無事,出於對當初興趣的尊敬,就順手實現了一款簡易的摩斯編解碼器。git

二、編解碼設計

  本身玩兒,暫定中文摩斯編碼。基本思想是,將漢字對應的四位區位碼數字分別編碼爲數字對應的摩斯碼,一箇中文對應20位摩斯碼。解碼過程逆向。程序員

三、代碼實現

  首先,項目結構圖以下:github

  由於是個小工具,整個項目採用WPF實現。算法

主界面:數組

就核心過程而言,編碼分兩步:工具

一、漢字轉區位碼ui

 此算法是直接抄的,原始出處,有點兒懶得費功夫找了,再次聲明,不是在下原創。編碼

 /// <summary>
        /// 漢字轉區位碼方法
        /// </summary>
        /// <param name="chinese">漢字</param>
        /// <returns>區位碼</returns>
        public static string ChineseToCoding(string chinese)
        {
            string pCode = "";
            byte[] pArray = new byte[2];
            pArray = Encoding.GetEncoding("GB2312").GetBytes(chinese);//獲得漢字的字節數組
            int front = (short)(pArray[0] - '\0') - 160;//將字節數組的第一位160
            int back = (short)(pArray[1] - '\0') - 160;//將字節數組的第二位160
            pCode = front.ToString("D2") + back.ToString("D2");//再鏈接成字符串就組成漢字區位碼
            return pCode;
        }

 

二、區位碼轉摩斯碼spa

 

private static readonly Dictionary<string, string> _dictNumberMorse = new Dictionary<string, string>
        {
            { "0", "— — — — —"},
            { "1", "· — — — —"},
            { "2", "· · — — —"},
            { "3", "· · · — —"},
            { "4", "· · · · —"},
            { "5", "· · · · ·"},
            { "6", "— · · · ·"},
            { "7", "— — · · ·"},
            { "8", "— — — · ·"},
            { "9", "— — — — ·"},
        };

        private static readonly Dictionary<string, string> _dictMorseNumber = new Dictionary<string, string>
        {
            { "—————", "0"},
            { "·————", "1"},
            { "··———", "2"},
            { "···——", "3"},
            { "····—", "4"},
            { "·····", "5"},
            { "—····", "6"},
            { "——···", "7"},
            { "———··", "8"},
            { "————·", "9"},
        };

        public static string GBK2Morse(string gbkCode)
        {
            if (string.IsNullOrWhiteSpace(gbkCode) || gbkCode.Length != 4)
            {
                throw new ArgumentException($"{nameof(gbkCode)}非GBK區位碼");
            }

            StringBuilder sbMorse = new StringBuilder();
            foreach (var s in gbkCode)
            {
                sbMorse.Append(_dictNumberMorse[s.ToString()]).Append("     ");
            }

            return sbMorse.ToString();
        }

 

四、運行效果 

github地址:https://github.com/KINGGUOKUN/MorseEncoder設計

五、結語

  /     · · · · ·     · · · · ·     — — — — —     · · · — —     /     · · — — —     — — — — —     — — — · ·     · · · — —     /     · · — — —     — — — · ·     · · · · ·     — — — — —     /1024/     · · · — —     · — — — —     — — · · ·     — · · · ·     /     · · · — —     · · — — —     · · · · ·     · · · · —     /!

(你們猜出結語是啥了嗎?)

相關文章
相關標籤/搜索