C# 实现 摩尔斯电码

发布时间:2024年01月23日

????????摩尔斯电码(Morse code)是一种用于传输信息的编码系统。它由美国发明家塞缪尔·摩尔斯(Samuel Morse)于1830年代发明并推广。摩尔斯电码是一种通过发送和接收短暂的电信号或光信号来表达字母、数字和标点符号的国际通信方式。

????????摩尔斯电码使用两种基本类型的信号:点(.)和划(-)。这些信号在时间上的变化反映了字母和数字之间的不同组合方式。每个字符由一系列点和划的序列组成,并用间隔来区分不同的字符。摩尔斯电码表达了所有的拉丁字母、阿拉伯数字和常见的标点符号。

????????摩尔斯电码在历史上被广泛用于电报通信,特别是在航海、军事和应急通信中。尽管在现代通信中已经被更高效的数字编码所取代,但摩尔斯电码仍然广泛应用于无线电通信、国际SOS紧急信号和业余无线电爱好者之间的交流。

以下是一些摩尔斯电码的应用场景:

  1. 电报通信:在早期的电报通信中,摩尔斯电码被用于传输字母、数字和标点符号。通过电键或手动控制电路,将摩尔斯电码对应的信号发送出去。

  2. 灯光通信:在军事和紧急求救等场合,摩尔斯电码被用于通过灯光信号传递信息。使用闪电灯、手电筒或其他光源,通过打开和关闭灯光来表达摩尔斯电码。

  3. 无线电通信:摩尔斯电码是早期无线电通信的常用编码系统。在电报机或电码器上输入摩尔斯电码,然后通过无线电信号进行发送和接收。这在航海、航空和军事通信中被广泛应用。

  4. 电子邮件和短信:在电子邮件和短信中,摩尔斯电码可以用作紧急信号的一种形式。例如,在SOS信号中,摩尔斯电码的三个短信号表示字母"S",而三个长信号表示字母"O"。

  5. 救援和求救:摩尔斯电码被广泛应用于求救和救援场景中。例如在山地探险或海上航行中遇到困境时,可以使用摩尔斯电码发送求救信号,以便被接收者收到并识别。

????????总的来说,摩尔斯电码的简洁性和易于识别性使其成为一种广泛应用于各种通信领域的编码系统。

以下是使用C#实现摩尔斯电码编码和解码的示例代码:

using System;
using System.Collections.Generic;

class MorseCode
{
? ? private static Dictionary<char, string> charToMorse = new Dictionary<char, 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', "----."}
? ? };

? ? private static Dictionary<string, char> morseToChar = new Dictionary<string, char>();

? ? static void Main(string[] args)
? ? {
? ? ? ? // 构建反向字典
? ? ? ? foreach (KeyValuePair<char, string> pair in charToMorse)
? ? ? ? {
? ? ? ? ? ? morseToChar[pair.Value] = pair.Key;
? ? ? ? }

? ? ? ? string text = "HELLO WORLD";
? ? ? ? string encoded = Encode(text.ToUpper());
? ? ? ? Console.WriteLine($"摩尔斯电码编码结果:{encoded}");

? ? ? ? string decoded = Decode(encoded);
? ? ? ? Console.WriteLine($"摩尔斯电码解码结果:{decoded}");
? ? }

? ? static string Encode(string text)
? ? {
? ? ? ? string encoded = "";
? ? ? ? foreach (char c in text)
? ? ? ? {
? ? ? ? ? ? if (charToMorse.ContainsKey(c))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? encoded += charToMorse[c] + " ";
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? encoded += " ";
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return encoded.Trim(); // 移除末尾的空格
? ? }

? ? static string Decode(string morseCode)
? ? {
? ? ? ? string[] words = morseCode.Split(' ');
? ? ? ? string decoded = "";
? ? ? ? foreach (string word in words)
? ? ? ? {
? ? ? ? ? ? string[] letters = word.Split(' ');
? ? ? ? ? ? foreach (string letter in letters)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (morseToChar.ContainsKey(letter))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? decoded += morseToChar[letter];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? decoded += " ";
? ? ? ? }
? ? ? ? return decoded.Trim(); // 移除末尾的空格
? ? }
}
????????该示例代码将给定的文本进行摩尔斯电码编码和解码,然后输出编码结果和解码结果。请注意,字母间用空格分隔,单词间用两个空格分隔。

文章来源:https://blog.csdn.net/hefeng_aspnet/article/details/135740119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。