From 1dc79e2b410c4512e2d9cafae1fe5aa619cacef5 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sun, 12 Jun 2011 14:02:33 +0200 Subject: [PATCH] add "xencoding", an encoding scheme of numbers into invisible parts of messages --- qcsrc/common/util.qc | 34 ++++++++++++++++++++++++++++++++++ qcsrc/common/util.qh | 7 +++++++ 2 files changed, 41 insertions(+) diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 89cb92baf..23d4f3431 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -2017,3 +2017,37 @@ string CTX(string s) return s; return substring(s, p+1, -1); } + +// x-encoding (encoding as zero length invisible string) +const string XENCODE_2 = "xX"; +const string XENCODE_22 = "0123456789abcdefABCDEF"; +string xencode(float f) +{ + float a, b, c, d; + d = mod(f, 22); f = floor(f / 22); + c = mod(f, 22); f = floor(f / 22); + b = mod(f, 22); f = floor(f / 22); + a = mod(f, 2); // f = floor(f / 2); + return strcat( + "^", + substring(XENCODE_2, a, 1), + substring(XENCODE_22, b, 1), + substring(XENCODE_22, c, 1), + substring(XENCODE_22, d, 1) + ); +} +float xdecode(string s) +{ + float a, b, c, d; + if(substring(s, 0, 1) != "^") + return -1; + if(strlen(s) < 5) + return -1; + a = strstrofs(XENCODE_2, substring(s, 1, 1), 0); + b = strstrofs(XENCODE_22, substring(s, 2, 1), 0); + c = strstrofs(XENCODE_22, substring(s, 3, 1), 0); + d = strstrofs(XENCODE_22, substring(s, 4, 1), 0); + if(a < 0 || b < 0 || c < 0 || d < 0) + return -1; + return ((a * 22 + b) * 22 + c) * 22 + d; +} diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 49afad22d..5a5792cb7 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -258,3 +258,10 @@ string prvm_language; string language_filename(string s); string CTX(string s); #define ZCTX(s) strzone(CTX(s)) + +// x-encoding (encoding as zero length invisible string) +// encodes approx. 14 bits into 5 bytes of color code string +const float XENCODE_MAX = 21295; // 2*22*22*22-1 +const float XENCODE_LEN = 5; +string xencode(float f); +float xdecode(string s); -- 2.39.2