摩斯码编解码器
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/ · · · — — · — — — — — — · · · — · · · · / · · · — — · · — — — · · · · · · · · · — /!
(大家猜出结语是啥了吗?)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?