摩斯碼編解碼器
阿新 • • 發佈:2018-10-25
style param 再次 中文 通信 col 程序員 記得 ext
1、背景
今天是1024,程序員節那就幹點兒程序員的事情。剛好,記得上高中時候,看過一部電影,無間道,裏邊黃秋生和梁朝偉用摩斯碼通信,瞬間覺得好神秘,好帥氣。最近閑來無事,出於對當初興趣的尊敬,就順手實現了一款簡易的摩斯編解碼器。
2、編解碼設計
自己玩兒,暫定中文摩斯編碼。基本思想是,將漢字對應的四位區位碼數字分別編碼為數字對應的摩斯碼,一個中文對應20位摩斯碼。解碼過程逆向。
3、代碼實現
首先,項目結構圖如下:
因為是個小工具,整個項目采用WPF實現。
主界面:
就核心過程而言,編碼分兩步:
1、漢字轉區位碼
此算法是直接抄的,原始出處,有點兒懶得費功夫找了,再次聲明,不是在下原創。
/// <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; }
2、區位碼轉摩斯碼
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(); }
4、運行效果
github地址:https://github.com/KINGGUOKUN/MorseEncoder
5、結語
/ · · · · · · · · · · — — — — — · · · — — / · · — — — — — — — — — — — · · · · · — — / · · — — — — — — · · · · · · · — — — — — /1024/ · · · — — · — — — — — — · · · — · · · · / · · · — — · · — — — · · · · · · · · · — /!
(大家猜出結語是啥了嗎?)
摩斯碼編解碼器