7. Transliterating the alphabet into hexadecimal¶
7.1. Introduction¶
.scope: This document explains how to represent the alphabet as hexadecimal digits.
.readership: This document is intended for anyone devising arbitrary constants which may appear in hex-dumps.
.sources: This transliteration was supplied by RichardK in mail.richardk.1997-04-07.13-44.
7.2. Transliteration¶
.forward: The chosen transliteration is as follows:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEF9811C7340BC6520F3812
.backward: The backwards transliteration is as follows:
0 OU
1 IJY
2 TZ
3 MW
4 N
5 S
6 R
7 L
8 HX
9 G
A A
B BP
C CKQ
D D
E E
F FV
.pad: If padding is required (to fill a hex constant length), you should use 9’s, because G is rare and can usually be inferred from context.
.punc: There is no formal scheme for spaces, or punctuation. It is suggested that you use 9 (as .pad).
7.3. Justification¶
.letters: The hexadecimal letters (A-F) are all formed by similarity of sound. B and P sound similar, as do F and V, and C, K, & Q can all sound similar.
.numbers: The numbers (0-9) are all formed by similarity of shape (but see .trans.t). Nevertheless, 1=IJY retains some similarity of sound.
.trans.t: T is an exception to .numbers, but is such a common letter that it deserves it.
7.4. Notes¶
.change: This transliteration differs from the old transliteration used for signatures (see design.mps.sig(0)), as follows: J:6->1; L:1->7; N:9->4; R:4->6; W:8->3; X:5->8; Y:E->I.
.problem.mw: There is a known problem that M and W are both common, map to the same digit (3), and are hard to distinguish in context.
.find.c: It is possible to find all 8-digit hexadecimal constants and how many times they’re used in C files, using the following Perl script:
perl5 -n -e 'BEGIN { %C=(); } if(/0x([0-9A-Fa-f]{8})/) { $C{$1} = +[] if(
!defined($C{$1})); push(@{$C{$1}}, $ARGV); } END { foreach $H (sort(keys(%C)))
{ printf "%3d %s %s\n", scalar(@{$C{$H}}), $H, join(", ", @{@C{$H}}); } }' *.c
*.h
.comment: It is a good idea to add a comment to any constant declaration indicating the English version and which letters were selected (by capitalisation), e.g.:
#define SpaceSig ((Sig)0x5195BACE) /* SIGnature SPACE */