我正在将一些源代码从一种脚本语言(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 ++的东西,可能还有一点点加法?
答案 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)
我建议编写一个简单的小型控制台程序,将二进制文字转换为十六进制文字。
这是我要使用的流程:
现在你有一个带有二进制文字的文本文件,每行一个。
编写一个程序来读入文件,转换为十六进制文字和输出。
然后通过粘贴所有遗漏的内容来编辑此文件。