摩斯电码

介绍

摩斯电码(Morse alphabet)(又译为摩尔斯电码)是一种时通时断的信号代码, 这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。

摩斯电码由美国人摩尔斯(Samuel Finley Breese Morse)于1837年发明,为摩尔斯电报机的发明(1835年)提供了条件。

压缩后的主要js

1
!function(e,r){"object"==typeof module&&module.exports?(module.exports=r(),module.exports.default=module.exports):e.xmorse=r()}("undefined"!=typeof window?window:this,function(){function e(e){return e=e||{},[e.space||"/",e.short||".",e.long||"-"]}function r(e){for(var r=[],n=0;n<e.length;n++)r[n]=("00"+e.charCodeAt(n).toString(16)).slice(-4);return r=r.join(""),r=parseInt(r,16).toString(2)}function n(n,o){o=e(o);var t=[];n=n.replace(/\s+/g,"").toLocaleUpperCase().split("");for(var u,a,i=0,c=n.length;i<c;i++)u=n[i],a=p[u],a||(a=r(u)),t.push(a.replace(/0/g,o[1]).replace(/1/g,o[2]));return t.join(o[0])}function o(e){return e=parseInt(e,2),isNaN(e)?"":unescape("%u"+e.toString(16))}function t(r,n){n=e(n);var t=[];r=r.split(n[0]);for(var p,a,i=0,c=r.length;i<c;i++)p=r[i].replace(/\s+/g,"").replace(new RegExp("\\"+n[1],"g"),"0").replace(new RegExp("\\"+n[2],"g"),"1"),a=u[p],a||(a=o(p)),t.push(a);return t.join("")}var p={A:"01",B:"1000",C:"1010",D:"100",E:"0",F:"0010",G:"110",H:"0000",I:"00",J:"0111",K:"101",L:"0100",M:"11",N:"10",O:"111",P:"0110",Q:"1101",R:"010",S:"000",T:"1",U:"001",V:"0001",W:"011",X:"1001",Y:"1011",Z:"1100",0:"11111",1:"01111",2:"00111",3:"00011",4:"00001",5:"00000",6:"10000",7:"11000",8:"11100",9:"11110",".":"010101",",":"110011","?":"001100","'":"011110","!":"101011","/":"10010","(":"10110",")":"101101","&":"01000",":":"111000",";":"101010","=":"10001","+":"01010","-":"100001",_:"001101",'"':"010010",$:"0001001","@":"011010"},u={};for(var a in p)u[p[a]]=a;return{encode:n,decode:t}});

不用看,会用就行

编码

1
xmorse.encode(string)

解码

1
xmorse.decode(string)

先引入jq

1
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>

html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<div class="panel panel-default">
<div class="panel-heading">摩斯密码转换器</div>
<div class="panel-body text-center">
<div class="form-group">
<textarea class="form-control" rows="3" cols="200" id="input" placeholder="在这里贴入要转换的内容">我喜欢你</textarea>
</div>

<div class="form-group row">
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon">分割</span>
<input type="text" class="form-control" id="space" value="/">
</div>
</div>

<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon"></span>
<input type="text" class="form-control" id="long" value="-">
</div>
</div>

<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon"></span>
<input type="text" class="form-control" id="short" value=".">
</div>
</div>
</div>

<div class="form-group">
<button class="btn btn-success" id="encode">
<span class="glyphicon glyphicon-sort-by-order-alt" aria-hidden="true"></span>
编码
</button>

<button class="btn btn-info" id="decode">
<span class="glyphicon glyphicon-sort-by-order" aria-hidden="true"></span>
解码
</button>

<button class="btn btn-info" id="play" style="display: none">
<span class="glyphicon glyphicon-volume-up" aria-hidden="true"></span>
播放
</button>

<button class="btn btn-default" onclick="$('#input').val('');$('#output').val('')">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
清空
</button>
</div>

<div class="form-group">
<textarea class="form-control" rows="3" cols="200" id="result" placeholder="转换结果"
readonly="" onmouseover="this.focus();this.select();"></textarea>
</div>
</div>
</div>

js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 编码
$("#encode").click(function(){
$('#result').val(xmorse.encode($('#input').val(), getoption()));
$('#play').show();
});

// 解码
$("#decode").click(function(){
$('#result').val(xmorse.decode($('#input').val(), getoption()) || '解码失败,请确认输入是否正确');
$('#play').hide();
});

function getoption() {
return {
space: $('#space').val(),
short: $('#short').val(),
long: $('#long').val()
};
}



$("#play").click(function(){
var AudioContext = window.AudioContext || window.webkitAudioContext;
var ctx = new AudioContext();
var dot = 1.2 / 15;

var splits = getoption();

var t = ctx.currentTime;

var oscillator = ctx.createOscillator();
oscillator.type = "sine";
oscillator.frequency.value = 600;

var gainNode = ctx.createGain();
gainNode.gain.setValueAtTime(0, t);

$('#result').val().split("").forEach(function(letter) {
switch(letter) {
case splits.short:
gainNode.gain.setValueAtTime(1, t);
t += dot;
gainNode.gain.setValueAtTime(0, t);
t += dot;
break;
case splits.long:
gainNode.gain.setValueAtTime(1, t);
t += 3 * dot;
gainNode.gain.setValueAtTime(0, t);
t += dot;
break;
case splits.space:
t += 7 * dot;
break;
}
});

oscillator.connect(gainNode);
gainNode.connect(ctx.destination);

oscillator.start();

return false;
});

实例

摩斯密码转换器
分割

END

–…-….-…-/-…-.——.-../-..—.-….–./–…-..-……/–..—….-..-/—.–.-….-../-…–……—./——–….–../-..—-.–…../-.-…-.–.-…/-..-….——.-/—.–.—–…/-..——-….-/——–….–../—-.—……./-.-..–.-.-.-.-/—.–.-….-../——–….–../–…-….-…-/—..-…–…-/-..—-.–…../——–….–../-..—-.–…../-.-..–.—.-../-…………..-/-..—…..–.-/-..——-….-/–……….-.


–..—……../–……–.-…/-……—-.-.-./-.—.—–…-/–..–…..—./–..–…..—./–…..—-..–/-…-..–……-/–…-….-…./-.-..-.-..—–/——–….–../-.-..–.—.-../-..—…..–.-/-.-..-.-.-.-.-./-.-..-.-..–.–/–……….-.

经测试,原本的电码会被hexo渲染,“-”部分莫名其妙的连了起来,上方为错误示例,下方使用代码框防渲染。

1
--...-....-...-/-...-.------.-../-..---.-....--./--...-..-....../--..---....-..-/---.--.-....-../-...--......---./--------....--../-..----.--...../-.-...-.--.-.../-..-....------.-/---.--.-----.../-..-------....-/--------....--../----.---......./-.-..--.-.-.-.-/---.--.-....-../--------....--../--...-....-...-/---..-...--...-/-..----.--...../--------....--../-..----.--...../-.-..--.---.-../-..............-/-..---.....--.-/-..-------....-/--..........-.


1
--..---......../--......--.-.../-......----.-.-./-.---.-----...-/--..--.....---./--..--.....---./--.....----..--/-...-..--......-/--...-....-..../-.-..-.-..-----/--------....--../-.-..--.---.-../-..---.....--.-/-.-..-.-.-.-.-./-.-..-.-..--.--/--..........-.

满分是10分的话,这篇文章你给几分,您的支持将鼓励我继续创作!