Morse Code摩斯電碼,嚴格說起來不算密碼,19世紀美國Samuel Morese於1836年發明,一直是海事通訊中國際標準。
通常用一種音調平穩"時斷時續"的無線電信號傳送,也可以是一種機械的或視覺的信號(比如閃光),學知識兼練C#語法。
我們來試看看用Console Beep聲響作出摩斯電碼,首先需要先理解編碼方式,下表為常用英數字。
- (1)點:1個時間單位 Dit
- (2)劃:3個時間單位 Dah
- (3)點劃之間: 1個時間單位
- (4)字母間隔: 3個時間單位
- (5)單字之間隔:7個時間單位
1.先將常用文字編碼寫成字典
public Dictionary<char, string> MorseCodeDictionary = 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' , "----."},
{'.' , ".-.-.-"},
{':' , "---..."},
{',' , "--..--"},
{';' , "-.-.-."},
{'?' , "..--.."},
{'=' , "-...-"},
{'/' , "-..-."},
{'!' , "-.-.--"},
};
2.Parse輸入字串發出Dit/Dah聲音。
void MorseBeep(string MorseCode)
{
int freq = 1000;
//1個時間單位0.2秒
int duration = 200;
foreach (char c in MorseCode.ToUpper())
{
char PrevCode = ' ';
foreach (var Code in MorseCodeDictionary[c])
{
//(3)
if (!PrevCode.Equals(Code) && !' '.Equals(Code))
{
System.Threading.Thread.Sleep(duration);
}
PrevCode = Code;
//(1)Dit
if (Code.Equals('.'))
{
Console.Beep(freq, duration);
}
//(2)Dah
else if (Code.Equals('-'))
{
Console.Beep(freq, duration * 3);
}
}
//(4)Letter Interval
System.Threading.Thread.Sleep(duration * 3);
}
}
3.測試方法:
SOS求救:Save Our Ship
MorseBeep("SOS!");
然後MBP就發出求救訊號了!
1912年鐵達尼號Titanic發出求救訊號:
記憶方式:
參考: