如何定义自定义文字?

时间:2014-11-22 16:32:52

标签: c++ visual-studio-2013 literals user-defined-literals

我正在将一些源代码从一种脚本语言(PAWN)转换为Windows上的编程语言(C ++)。

源代码在以下形式中包含数百万个二进制文字:

data[] = 
{
    0b11111111111011111110110111111110, 0b00000000001111111111111111111111,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    ///some million lines later...
    0b00000000000000000000000000000000, 0b11111111111111111111111110000000,
    0b11100001001111111111111111111111, 0b11110111111111111111111111111111,
    0b11111111111111111111111111111111, 0b11111111111111111111111111111111,

令我不幸的是,Visual Studio 2013不支持用户定义的文字标准。

是否有任何wya以某种方式实现这一目标? 010101_b或者带有C ++的东西,可能还有一点点加法?

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用脚本转换源代码。

无论如何,如果你对Boost.PP感兴趣:

#define FROM_BINARY(s, data, elem) sum(#elem+2)

constexpr auto sum(char const* str, std::uintmax_t val = 0) -> decltype(val)
{
    return !*str? val : sum(str+1, (val << 1) + *str - '0');
}

unsigned data[]
{
    BOOST_PP_TUPLE_REM_CTOR(BOOST_PP_SEQ_TO_TUPLE(
        BOOST_PP_SEQ_TRANSFORM(FROM_BINARY, , 
            BOOST_PP_VARIADIC_TO_SEQ(
    0b11111111111011111110110111111110, 0b00000000001111111111111111111111,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
    ///some million lines later...
    0b00000000000000000000000000000000, 0b11111111111111111111111110000000,
    0b11100001001111111111111111111111, 0b11110111111111111111111111111111,
    0b11111111111111111111111111111111, 0b11111111111111111111111111111111))))
};

请注意,这可能会大大减慢编译时间。所以,再次尝试转换源dode一次。

答案 1 :(得分:0)

我建议编写一个简单的小型控制台程序,将二进制文字转换为十六进制文字。

这是我要使用的流程:

  1. 复制文件。
  2. 使用文本编辑器删除第一个文字之前的所有内容。
  3. 删除最后一个字面后的所有内容。
  4. 保存。
  5. 替换&#34;,&#34;换行。
  6. 保存。
  7. 现在你有一个带有二进制文字的文本文件,每行一个。

    编写一个程序来读入文件,转换为十六进制文字和输出。

    然后通过粘贴所有遗漏的内容来编辑此文件。