摩斯电码翻译:文字互转
业余无线电、密码学学习、应急求救——摩斯电码仍有应用场景。本文详解摩斯码与文字互转。
什么是摩斯电码?
摩斯电码(Morse Code)是用短信号(.)和长信号(-)表示字符的编码方式:
A → .-
B → -...
C → -.-.
S → ...
O → ---
SOS → ... --- ...
历史
1836 年美国 Samuel Morse 发明,用于电报。早期航海、军事广泛使用,后被电话取代。
现代应用
- 业余无线电
- 应急求救
- 灯光信号(手电筒、信号灯)
- 密码学学习
- CTF 比赛题目
- 装饰、艺术
摩斯码表
字母
| 字母 | 摩斯码 | 字母 | 摩斯码 |
| A | .- | N | -. |
| B | -... | O | --- |
| C | -.-. | P | .--. |
| D | -.. | Q | --.- |
| E | . | R | .-. |
| F | ..-. | S | ... |
| G | --. | T | - |
| H | .... | U | ..- |
| I | .. | V | ...- |
| J | .--- | W | .-- |
| K | -.- | X | -..- |
| L | .-.. | Y | -.-- |
| M | -- | Z | --.. |
数字
| 数字 | 摩斯码 |
| 0 | ----- |
| 1 | .---- |
| 2 | ..--- |
| 3 | ...-- |
| 4 | ....- |
| 5 | ..... |
| 6 | -.... |
| 7 | --... |
| 8 | ---.. |
| 9 | ----. |
标点符号
| 符号 | 摩斯码 | 符号 | 摩斯码 |
| . | .-.-.- | ? | ..--.. |
| , | --..-- | ! | -.-.-- |
| : | ---... | / | -..-. |
| ; | -.-.-. | ( | -.--. |
| = | -...- | ) | -.--.- |
| + | .-.-. | & | .-... |
| - | -....- | @ | .--.-. |
| _ | ..--.- | " | .-..-. |
| $ | ...-..- | ' | .----. |
特殊符号
| 含义 | 摩斯码 |
| SOS(求救) | ... --- ... |
| AR(消息结束) | .-.-. |
| BT(分隔) | -...- |
| SK(通信结束) | ...-.- |
中文摩斯码
中文需先转电报码(4 位数字)再转摩斯:
中 → 0022 → ..--- ----. ..--- ..---
文 → 2429 → ..--- ....- ..--- ----.
52tool 摩斯码翻译
工具地址:Unicode 工具(含摩斯码)
功能
- 文字 → 摩斯码
- 摩斯码 → 文字
- 自定义分隔符
- 播放声音
- 浏览器端处理
实战 1:文字转摩斯码
输入:
HELLO
输出:
.... . .-.. .-.. ---
实战 2:摩斯码转文字
输入:
.... . .-.. .-.. ---
输出:
HELLO
实战 3:自定义分隔符
输入:
分隔符:/
文字:SOS
输出:.../---/...
摩斯码传输
时长规范
国际摩斯码标准时长:
.(dit):1 单位-(dah):3 单位- 字符内间隔:1 单位
- 字符间隔:3 单位
- 单词间隔:7 单位
单位通常是 0.1 秒(每分钟 12 词)。
声音
- 短音(dit):1000Hz 频率,持续 0.1 秒
- 长音(dah):1000Hz,持续 0.3 秒
灯光
- 短闪:0.1 秒
- 长闪:0.3 秒
编程实现
JavaScript
const MORSE_CODE = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
'Z': '--..',
'0': '-----', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...',
'8': '---..', '9': '----.'
};
// 文字转摩斯
function textToMorse(text) {
return text.toUpperCase().split('').map(c => {
if (c === ' ') return '/';
return MORSE_CODE[c] || c;
}).join(' ');
}
// 摩斯转文字
function morseToText(morse) {
const reverseMorse = Object.fromEntries(
Object.entries(MORSE_CODE).map(([k, v]) => [v, k])
);
return morse.split(' ').map(m => {
if (m === '/') return ' ';
return reverseMorse[m] || m;
}).join('');
}
console.log(textToMorse('Hello')); // .... . .-.. .-.. ---
console.log(morseToText('.... . .-.. .-.. ---')); // HELLO
Python
MORSE_CODE = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
'Z': '--..',
'0': '-----', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...',
'8': '---..', '9': '----.'
}
def text_to_morse(text):
return ' '.join(MORSE_CODE.get(c.upper(), c) for c in text)
def morse_to_text(morse):
reverse = {v: k for k, v in MORSE_CODE.items()}
return ''.join(reverse.get(code, code) for code in morse.split())
print(text_to_morse('Hello')) # .... . .-.. .-.. ---
播放摩斯码声音
function playMorse(morse) {
const audioContext = new AudioContext();
let time = audioContext.currentTime;
morse.split('').forEach(symbol => {
if (symbol === '.') {
playBeep(audioContext, time, 0.1);
time += 0.1 + 0.1;
} else if (symbol === '-') {
playBeep(audioContext, time, 0.3);
time += 0.3 + 0.1;
} else if (symbol === ' ') {
time += 0.2;
} else if (symbol === '/') {
time += 0.6;
}
});
}
function playBeep(ctx, start, duration) {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.frequency.value = 600; // 摩斯码标准频率
osc.connect(gain);
gain.connect(ctx.destination);
gain.gain.setValueAtTime(0.5, start);
gain.gain.setValueAtTime(0, start + duration);
osc.start(start);
osc.stop(start + duration);
}
实战场景
场景 1:SOS 求救
紧急情况下用光、声音发 SOS:
... --- ...
短 短 短 - 长 长 长 - 短 短 短
- 手电筒:3 短闪,3 长闪,3 短闪
- 口哨:3 短,3 长,3 短
- 镜子反光:3 短,3 长,3 短
国际通用求救信号。
场景 2:业余无线电
业余无线电爱好者用摩斯码通信:
CQ CQ CQ DE BG1ABC
(呼叫呼叫呼叫,这里是 BG1ABC)
场景 3:密码学学习
摩斯码是基础密码学内容,了解编码原理。
场景 4:CTF 比赛
CTF(Capture The Flag)竞赛中常见摩斯码题目:
题目:.... . .-.. .-.. ---
答案:HELLO
场景 5:装饰艺术
项链、印章、装饰品上的摩斯码:
"LOVE" → .-.. --- ...- .
场景 6:表白暗号
"I LOVE YOU" → .. /. .-.. --- ...- . / -.-- --- ..-
场景 7:手电筒信号
夜间用手电筒发摩斯码:
短按:.
长按(3 倍时长):-
场景 8:盲人手语
类似思路,用触觉表示摩斯码。
摩斯码速度
单位时长
通常单位 = 0.1 秒:
- dit:0.1 秒
- dah:0.3 秒
- 字符内间隔:0.1 秒
- 字符间隔:0.3 秒
- 单词间隔:0.7 秒
WPM(Words Per Minute)
业余无线电用 WPM 衡量速度:
WPM = 60 / (5 × 单位时长)
- 5 WPM:单位 0.24 秒(慢速)
- 13 WPM:单位 0.092 秒(入门)
- 20 WPM:单位 0.06 秒(熟练)
- 40 WPM:单位 0.03 秒(高手)
摩斯码练习
入门技巧
- 听音辨码:先学字符声音,不背符号
- 从高频字符开始:E T I A N M S O
- 整字记忆:不要数长短,整体识别
- 每日 15 分钟:坚持比集中好
推荐工具
- LCWO.net:在线练习
- Morse Toad:手机 App
- Morse Trainer:桌面软件
高频字符顺序(按使用频率)
E T A O I N S H R D L C U M W F G Y P B V K J X Q Z
先学前 8 个能识别 60% 常用字符。
与其他工具配合
摩斯码 + Unicode
工具:Unicode 工具
中文转 Unicode 后再转摩斯码。
摩斯码 + Base64
工具:Base64 编解码
摩斯码字符串可 Base64 编码便于存储。
摩斯码 + 二进制
. → 0
- → 1
分隔 → 空格
HELLO → .... . .-.. .-.. ---
→ 0000 0 0111 0111 111
常见问题
Q: 摩斯码区分大小写吗?
A: 不区分。统一转大写处理。
Q: 中文能转摩斯码吗?
A: 需要先转电报码(4 位数字)再转摩斯码。直接转换工具通常只支持英文。
Q: 摩斯码还在用吗?
A: 用得少但仍有场景:业余无线电、应急求救、密码学教育、CTF。
Q: 怎么发 SOS?
A: ... --- ...,3 短 3 长 3 短。
Q: 摩斯码声音什么频率?
A: 标准 600Hz 或 1000Hz。业余无线电常用 700Hz。
Q: 工具会泄露我的内容吗?
A: 52tool 摩斯码工具在浏览器端运行,输入不上传服务器。
常见问题解答
Q: 怎么把文字转摩斯码?
A: 1) 打开 52tool 摩斯码;2) 输入文字;3) 自动转摩斯码;4) 复制结果。
Q: 怎么把摩斯码转文字?
A: 1) 输入摩斯码(空格分隔字符);2) 工具自动解析;3) 输出文字。
Q: SOS 摩斯码是什么?
A: ... --- ...(3 短 3 长 3 短)。
Q: 摩斯码能转中文吗?
A: 直接转不行。中文需先转电报码(4 位数字)再转摩斯码。
Q: 怎么用声音发摩斯码?
A: 短音(.)持续 0.1 秒,长音(-)持续 0.3 秒。字符间隔 0.3 秒,单词间隔 0.7 秒。频率 600Hz 或 1000Hz。
Q: 业余无线电还需要学摩斯码吗?
A: 自 2003 年起国际业余无线电不再强制要求摩斯码。但摩斯码仍受欢迎,尤其低功率远距离通信。
总结
摩斯码是经典通信编码:
- 在线翻译 → 52tool 摩斯码
- 应用 → 应急求救、业余无线电、CTF
- SOS → ... --- ...
- 学习 → 听音辨码,从高频字符开始
记住:SOS 是 ... --- ...,1 单位 0.1 秒,国际标准频率 600Hz。