6. Transliterating the alphabet into hexadecimal

6.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.

6.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).

6.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.

6.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 */