Mowa szesnastkowa (ang. hex speech)
13.04.2022 Dawid Farbaniec

Słowem wstępu
Szesnastkowy system liczbowy (nazywany też heksadecymalnym) do zapisu liczb korzysta z cyfr od 0 do 9 oraz liter od A do F. Razem jest to szesnaście znaków. Nie wiem kto, ale ktoś był tak genialny, że wymyślił by z tego zbioru znaków tworzyć słowa. Niektórzy czytelnicy może spotkali w kodzie albo gdzieś indziej zapis np.0xDEADBEEF
, 0xDEADC0DE
, 0x00000BAD
czy inne. Przedstawione frazy to wartości liczbowe zapisane w systemie szesnastkowym (nazywanym też w skrócie hex). Mimo, że są to liczby to na pierwszy rzut oka da się tam dopatrzeć słów z języka angielskiego. Np. DEADC0DE
» dead code » martwy kod. Czy też: DEADBEEF
» dead beef » martwa wołowina. Jeśli chodzi o użycie tych wartości to oprócz tego, że fajnie wyglądają, są używane do oznaczania różnych miejsc w kodzie. Taka wartość na pewno bardzo szybko się rzuci w oczy np. analizując program w debuggerze i obserwując wartości rejestrów procesora. Daje to wyraźny sygnał programiście/badaczowi.
Generator słów w C#.NET
Zastanawiając się jakie ciekawe słowa można wymyślić w mowie heksadecymalnej (ang. hex speech) wpadł mi do głowy pomysł, aby napisać generator możliwych słów.// See https://aka.ms/new-console-template for more information
string inputPath = @"C:\Users\x\Desktop\hex-speech\wordlist.txt";
string outputPath = @"C:\Users\x\Desktop\hex-speech\zz.txt";
var lines = File.ReadAllLines(inputPath).ToList();
var filtered = new List<string>();
char[] validChars = new char[]
{
'a', 'b', 'c', 'd', 'e', 'f', 'o', 'i', 't'
};
Dictionary<char, char> replaceChars = new ()
{
{ 'o' , '0'}, { 'i' , '1'}, { 't' , '7'}, { 's', '5' }
};
foreach (var line in lines)
{
foreach (var ch in line.ToLower())
{
if (validChars.Contains(ch) == false)
goto _skipline;
}
string formattedline = line;
foreach (var rch in replaceChars.Keys)
{
formattedline = formattedline.Replace(rch, replaceChars[rch]);
}
filtered.Add("0x" + formattedline.ToUpper());
_skipline:
continue;
}
File.WriteAllLines(outputPath, filtered);
Trochę wybranych słów
Powyższy program wygenerował ok. 300 słów. Oczywiście zależy to od użytego słownika i konfiguracji programu.Najbardziej podobają mi się poniższe słowa i pewnie będę je stosował. 😁
0xAC1D
– Acid (pol. kwas)
0xADD
– Add (pol. dodawanie)
0xADD1C7ED
– Addicted (pol. uzależniony)
0xAFFEC7ED
– Affected (pol. dotknięty, zajęty np. affected terrain)
0xBAD
– Bad (pol. zły)
0xBA0BAB
– Baobab (pol. to chyba takie drzewo?)
0xBEEF
– Beef (pol. wołowina)
0xB0B
– Bob (pol. takie imię)
0xCAFE
– Cafe (pol. kawiarnia)
0xC0C0A
– Cocoa (pol. kokos)
0xC0DE
– Code (pol. kod)
0xC0FFEE
– Coffee (pol. kawa)
0xDEAD
– Dead (pol. martwy)
0xDEAF
– Deaf (pol. głuchy)
0xDEC0DE
– Decode (pol. rozkodować)
0xDEFACED
– Defaced (pol. oszpecony)
0xD1ABE71C
– Diabetic (pol. cukrzycowy, diabetyk)
0xF00D
– Food (pol. jedzenie)
0x1DEA
– Idea (pol. pomysł)
0x70BACC0
– Tobacco (pol. tytoń)
0x70FFEE
– Toffee (pol. tofi)
Dziękuję za czas poświęcony na przeczytanie tego wpisu.