【发布时间】:2021-07-21 16:50:22
【问题描述】:
我想存储一个 216 位的静态常量位集,其中包含永不改变的 1 和 0 的特定序列。
我想过使用this post 提出的初始化字符串:
std::bitset<1<<16> myBitset("101100101000110 ... "); // the ellipsis are replaced by the actual 65536-character sequence
但是编译器 (VS2013) 给了我"string too long" 错误。
更新
我尝试按照上面链接的帖子中的建议将字符串分成更小的块,如下所示:
std::bitset<1<<16> myBitset("100101 ..."
"011001 ..."
...
);
但我收到错误C1091:编译器限制:字符串长度超过 65535 个字节。我的字符串是 65536 字节(技术上是 65537,带有 EOS 字符)。
我还有哪些其他选择?
更新
感谢luk32,这是我最终得到的漂亮代码:
const std::bitset<1<<16> bs = (std::bitset<1<<16>("101011...")
<< 7* (1<<13)) | (std::bitset<1<<16>("110011...")
<< 6* (1<<13)) | (std::bitset<1<<16>("101111...")
<< 5* (1<<13)) | (std::bitset<1<<16>("110110...")
<< 4* (1<<13)) | (std::bitset<1<<16>("011011...")
<< 3* (1<<13)) | (std::bitset<1<<16>("111011...")
<< 2* (1<<13)) | (std::bitset<1<<16>("111001...")
<< 1* (1<<13)) | std::bitset<1<<16>("1100111...");
【问题讨论】:
-
你不能把它分成多行吗?你知道
myBitset("1011" "0010"在两个中间引号之间有一个实际的换行符(不是文字的一部分)吗? -
您是否从您链接的问题中尝试this answer?
-
我没有,但如果没有其他选择,我会分开。
-
现在我有,我更新了帖子。
-
为什么不将其转储为二进制数据,将其作为二进制数据重新加载,并使用位掩码和偏移量从中获取数据?
bitset的功能有限。
标签: c++ initialization large-data compile-time-constant std-bitset