#HarmonyOS NEXT 体验官# 鸿蒙开发实战--摩斯电码 原创

吴来斌X
发布于 2024-8-6 01:02
浏览
0收藏

作者:吴来斌

前言:摩斯电码(Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,是由美国人萨缪尔·摩尔斯等人共同发明的一种电报通信方式。

一、概论

在摩斯电码中,每一种符号(点、划)都代表一种电脉冲信号,其中“点”代表短脉冲信号,“划”代表长脉冲信号。这些脉冲信号的持续时间、间隔时间和信号间的间隔都有严格的规定,以保证信息的准确传递。摩斯电码最初是为了在电报线上传输而设计的,但随着时间的推移,它也被广泛应用于其他领域,如无线电通信、航海、紧急救援等。

摩斯电码的基本单位是点和划,每个字母或数字都由一定数量的点和划组成。例如,字母“A”在摩斯电码中表示为“·-”(一点一划),而字母“B”则表示为“-···”(一划三点)。此外,摩斯电码还包含了一些特殊符号,如“.”(点)表示句点,“- - -”(三划)表示长音或停顿等。

尽管随着现代通信技术的发展,摩斯电码已经不再是主流的通信方式,但它仍然具有一定的实用价值。例如,在紧急情况下,当其他通信方式无法使用时,摩斯电码可以作为一种备用的通信手段。此外,摩斯电码也被广泛应用于无线电爱好者、航海家、军事人员等群体中,成为一种具有特殊意义的通信方式。


二、编解码器

2.1 摩斯电码映射表

注意:当前映射表除了大写字母和数字之后,还包含常用的英文标点符号。

  • 正映射表

// 摩斯电码映射表
const morseCodeMap: Record<string, string> = {
  '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': '----.',
  ' ': '____', // 空格
  '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '.----.', '!': '-.-.--', '"': '.-..-.', '#': '..--.-', '$': '...-..-',
  '%': '..-.', '&': '.-...', '(': '-.--.', ')': '-.--.-', '*': '-....-', '+': '.-.-.', '-': '-....-', '/': '-..-.',
  ':': '---...', ';': '-.-.-.',  '=': '-...-', '@': '.--.-.', '[': '-.--.', '\\': '..-..-', ']': '-.--.-',  '^': '..-.-', 
  '`': '.--.--', '_': '..--.-', '{': '.--.-.', '|': '|----',  '}': '-.--.-',  '~': '-.--.'
};


  • 反映射表

// 创建一个反向映射,但请注意,如果值不唯一,这将丢失信息
const reverseMorseCodeMap: Record<string, string> = {};

// 填充反向映射
Object.keys(morseCodeMap).forEach(key => {
  reverseMorseCodeMap[morseCodeMap[key]] = key; // 如果值已存在,这将覆盖之前的键
});


2.2 不含中文及中文符号

// 判断一个字符串是否包含中文字符,这里只是列举了一些常见的中文符号,你可以根据需要添加更多
export function containsChineseOrChineseSymbols(str: string): boolean {
  const chineseRegex = /[\u4e00-\u9fa5,。!?、;:“”‘’()《》【】]/;
  return chineseRegex.test(str);
}


2.3 编码函数

// 编码函数
export function encodeToMorse(text: string): string {
  return text.toUpperCase().split('').map(char => morseCodeMap[char] || '?').join(' ');
}


2.4 解码函数

// 解码函数
export function decodeFromMorse(morse: string): string {
  const words = morse.split(' ');
  return words.map(word => {
    return reverseMorseCodeMap[word]
  }).join('');
}


三、效果预览

注意:本文目前不支持中文的摩斯电码,并且英语字母自动大写

3.1 输入中文弹窗提醒

#HarmonyOS NEXT 体验官# 鸿蒙开发实战--摩斯电码-鸿蒙开发者社区

3.2 自动大写字母

#HarmonyOS NEXT 体验官# 鸿蒙开发实战--摩斯电码-鸿蒙开发者社区

#HarmonyOS NEXT 体验官# 鸿蒙开发实战--摩斯电码-鸿蒙开发者社区

3.3 编码和解码结果

#HarmonyOS NEXT 体验官# 鸿蒙开发实战--摩斯电码-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-8-6 01:02:58修改
1
收藏
回复
举报
回复
    相关推荐