2014-03-30 35 views
1

我一直在嘗試使用應該返回單個字節值的二進制表示形式的預處理器來創建查找表。基本上有256個元素的字符串數組。我似乎無法找到任何模式想法,所以我想知道是否有可能。使用C++預處理器的二進制表示查找表

+1

我想可以通過一些簡單的代碼生成(例如Python/Perl腳本)來簡化它。 –

+0

我不懷疑這是可能的,但正如你注意到的那樣,這很難。生成表格並粘貼最終代碼可能更簡單。 – Thomas

+0

「使用預處理器」 - 請澄清。 –

回答

4

在這裏你去:

#include <stdio.h> 

/* A macro for each bit */ 
#define B1(n) n "0", n "1" 
#define B2(n) B1(n "0"), B1(n "1") 
#define B3(n) B2(n "0"), B2(n "1") 
#define B4(n) B3(n "0"), B3(n "1") 
#define B5(n) B4(n "0"), B4(n "1") 
#define B6(n) B5(n "0"), B5(n "1") 
#define B7(n) B6(n "0"), B6(n "1") 

/* Shorter way: macros add 2 bits */ 
#define C2(s) s"00", s"01", s"10", s"11" 
#define C4(s) C2(s"00"), C2(s"01"), C2(s"10"), C2(s"11") 
#define C6(s) C4(s"00"), C4(s"01"), C4(s"10"), C4(s"11") 

static const char* Table256[256] = 
{ 
    /* B7("0"), B7("1") */ 
    C6("00"), C6("01"), C6("10"), C6("11") 
}; 

int main(int argc, const char* argv[]) 
{ 
    int i; 
    for(i=0; i<256; ++i) 
     printf("%s ", Table256[i]); 
    printf("\n"); 
    return 0; 
} 

的代碼是tested at ideone

+0

正是我在找的東西! – Veritas