使用C ++预处理器的二进制表示查找表

时间:2014-03-30 17:54:37

标签: c++ c-preprocessor

我一直在尝试使用预处理器创建一个查找表,该预处理器应返回单个字节值的二进制表示。基本上有256个元素的字符串数组。我似乎无法找到任何模式,所以我想知道它是否可能。

1 个答案:

答案 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