/******************************************************************************/ /* */ /* FILE: july.cpp */ /* */ /* A binary tree and binary operators produce a well known constant */ /* ================================================================ */ /* */ /* Compiled and tested with Visual C++ V6.0 */ /* */ /* V1.00 21-JUL-2001 P. Tellenbach http://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> struct node { node *zero ; node *one ; char ch ; } nodes[] = { { nodes + 2, nodes + 6, '-' }, { 0, 0, 'o' }, { nodes + 18, nodes + 4, '-' }, { 0, 0, '!' }, { nodes + 1, nodes + 3, '-' }, { 0, 0, ' ' }, { nodes + 8, nodes + 12, '-' }, { 0, 0, 'd' }, { nodes + 5, nodes + 10, '-' }, { 0, 0, 'H' }, { nodes + 9, nodes + 7, '-' }, { 0, 0, 'W' }, { nodes + 14, nodes + 16, '-' }, { 0, 0, 'r' }, { nodes + 17, nodes + 11, '-' }, { 0, 0, '\0'}, { nodes + 13, nodes + 15, '-' }, { 0, 0, 'e' }, { 0, 0, 'l' } } ; int main() { char *pm = "\xAC\x05\x35\x71\x71\xF8" ; int msk = 0x80 ; for( node *pn = nodes; ; pn = nodes ) { while( pn->ch == '-' ) { pn = *pm & msk ? pn->one : pn->zero ; if( (msk >>= 1) == 0 ) { pm++ ; msk = 0x80 ; } } if( pn->ch == '\0' ) return !(std::cout << std::endl) ; std::cout << pn->ch ; } }
Update 22. July 2021
The compiler complained about the variable pm because it was not defined as pointer to const. A simple const fixed that.
/******************************************************************************/ /* */ /* FILE: july.cpp */ /* */ /* A binary tree and binary operators produce a well known constant */ /* ================================================================ */ /* */ /* Compiled and tested with Visual C++ V6.0 */ /* */ /* V1.00 21-JUL-2001 P. Tellenbach https://www.heimetli.ch */ /* V1.01 22-JUL-2021 P. Tellenbach https://www.heimetli.ch */ /* */ /******************************************************************************/ #include <iostream> struct node { node *zero ; node *one ; char ch ; } nodes[] = { { nodes + 2, nodes + 6, '-' }, { 0, 0, 'o' }, { nodes + 18, nodes + 4, '-' }, { 0, 0, '!' }, { nodes + 1, nodes + 3, '-' }, { 0, 0, ' ' }, { nodes + 8, nodes + 12, '-' }, { 0, 0, 'd' }, { nodes + 5, nodes + 10, '-' }, { 0, 0, 'H' }, { nodes + 9, nodes + 7, '-' }, { 0, 0, 'W' }, { nodes + 14, nodes + 16, '-' }, { 0, 0, 'r' }, { nodes + 17, nodes + 11, '-' }, { 0, 0, '\0'}, { nodes + 13, nodes + 15, '-' }, { 0, 0, 'e' }, { 0, 0, 'l' } } ; int main() { const char *pm = "\xAC\x05\x35\x71\x71\xF8" ; int msk = 0x80 ; for( node *pn = nodes; ; pn = nodes ) { while( pn->ch == '-' ) { pn = *pm & msk ? pn->one : pn->zero ; if( (msk >>= 1) == 0 ) { pm++ ; msk = 0x80 ; } } if( pn->ch == '\0' ) return !(std::cout << std::endl) ; std::cout << pn->ch ; } }