3

我正在将一些源代码从一种脚本语言 (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 不支持用户定义的文字标准。

有没有办法以某种方式实现这一目标?010101_b 或 C++ 之类的东西,也许还有一点提升?

4

2 回答 2

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))))
};

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

于 2014-11-22T17:00:58.453 回答
0

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

这是我将使用的过程:

  1. 复制文件。
  2. 使用文本编辑器,删除第一个文字之前的所有内容。
  3. 删除最后一个文字之后的所有内容。
  4. 节省。
  5. 将“,”替换为换行符。
  6. 节省。

您现在有一个包含二进制文字的文本文件,每行一个。

编写程序读取文件,转换为十六进制文字并输出。

然后通过粘贴所有丢失的东西来编辑这个文件。

于 2014-11-22T17:02:48.107 回答