说起来,这“摩斯密码转换器”的念头,不是我主动想到的。事情是这样的,去年家里小孩儿迷上看那种谍战片,天天在家跟我玩什么“秘密电报”,嘴里嘀嘀嗒嗒的。他非要我给他发电报,但我哪儿懂那玩意儿,就上网查,一查发现好复杂,什么点划线,还有长短停顿,头都大了。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
当时我就想,这要是能有个工具,我一输入中文,它自己就给转化成摩斯码,多省事儿?反过来也一样,小孩儿要是搞出一段摩斯码,我直接一粘贴,立马就能知道他说的这想法一冒出来,就止不住了,觉得这玩意儿应该挺有意思的,也能给自己省点儿功夫。
于是乎,我就开始琢磨了。这玩意儿说白了,不就是个翻译机嘛一头是正常文字,另一头是那些个点划线。那得怎么弄?
先搞个界面出来
我这人干活儿,喜欢先搭个架子。立马就开了个文件,噼里啪一通HTML标签敲下去,先搞出两个大框。一个框是用来输普通文字的,就叫“文字输入区”;另一个框是用来显示摩斯码的,或者反过来输摩斯码的,就叫“摩斯码区”。中间,得有两个按钮,一个肯定叫“转摩斯码”,另一个就叫“转文字”。样式嘛我没花太多心思,能看就行,毕竟是自己瞎鼓捣着玩儿。
接着就是核心逻辑了
界面有了,但是它不干活!重点就是怎么让文字和摩斯码互相转换。我没那本事去背什么摩斯密码表,那东西太长了。我直接上网搜,找了个现成的“摩斯密码对照表”,就是那种“A是.-”,“B是-...”,“1是.----”的。我把这个表弄到我代码里,弄成一个对象或者映射关系。
-
文字转摩斯码:
我就写了个函数,这函数一跑起来,就去抓“文字输入区”里的内容。拿到内容后,一个字一个字地拆开。拆开一个字,我就去我的“对照表”里找,看看它对应的摩斯码是找到了,就给它加上去。字母和字母之间,我一开始没想太多,直接连起来了。结果一测试,发现不对劲,全挤一块儿了。后来才知道,字母之间得加个空格,单词之间得加三个空格,这才符合规矩。这一块儿,我改了不下五六遍,才算捋顺。
-
摩斯码转文字:
这个反过来转的,就更头疼了。因为摩斯码都是点划线加空格,怎么识别哪个是哪个字母?我一开始是直接按空格拆分,但发现有时候空格是字母间的,有时候是单词间的,搞得一团糟。我后来才搞明白,摩斯码里,一个点或一个划是一个单位,然后用一个空格隔开不同的字母的摩斯码,用三个空格(或者直接用斜杠"/")隔开不同的单词的摩斯码。所以我的函数得先看输入框里有没有斜杠,有的话就先按斜杠拆单词,再把每个单词里的摩斯码按空格拆开。然后每个拆出来的摩斯码字符串,就去对照表里反向查找,看看它是哪个字母。这逻辑折腾了我两天,才算勉强跑通。
遇到的那些坑,可真不少
搞这种东西,肯定会踩坑。
- 大小写问题: 我发现,摩斯密码它不分大小写!但我输入文字的时候,可能会输大小写混合的。所以我就在转换之前,统一把所有文字都转成小写,省得对照表里还得存两套。
- 数字和标点: 一开始我只想着字母,压根儿没管数字和标点。后来一想,发个电报哪能没有数字和标点?又回去把对照表给扩充了,加上了0-9这些数字,还有逗号、句号、问号这些常用的标点。
- 非法输入: 万一有人在摩斯码输入框里,不小心输了些中文或者别的乱七八糟的符号怎么办?程序肯定会报错。所以我就加了个判断,如果输入的内容不符合摩斯码的规则,就给个提示,让他别瞎捣鼓。
这些细枝末节的东西,远比我想象的要麻烦。有时候一个小小的空格或者一个判断条件没考虑到,整个程序就崩溃了,或者给出的结果完全是错的。
就是测试和上线了
功能都搞定后,就得反复测试。我找了些常见的句子,一句句输进去,转成摩斯码,再从摩斯码转回来,对比是不是一模一样。发现有好几个地方,转回来的时候会多出不必要的空格,或者少了个字母。我就对着代码一行一行地找,改了又改,好几天就泡在这上面了。
等到自己觉得没啥大问题了,我就把它简单地“上线”了。也没啥高大上的操作,就是把HTML、CSS和JavaScript这几个文件一打包,找了个免费的静态页面托管服务,往上一扔,然后就生成了一个链接。把链接往我的朋友群里一发,他们就能直接打开用了。
忙活了这么一通,虽然过程里是遇到不少麻烦,也觉得自己好多地方思考不周全。但看着自己亲手搓出来的这个小工具,能真的把文字和摩斯密码互相翻译,心里那叫一个得劲儿。现在小孩儿再缠着我玩儿“电报”,我就直接甩他这个工具,哈哈,方便多了。