在任何人说,"不要这样做,因为它真的很糟糕".
我理解NUL终止字符串的原因.
我知道可以陈述类似的东西
char mystr[] = { 'm', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g'};
但是,c-string表示的便利性太大了.
这样做的理由是我正在为微控制器编程,我需要将数据存储到程序的内存中.一些数据是字节,单词,双字和浮点数的形式.我希望数据包含没有NUL连续的字符串.
我已经尝试了将和作为参数的模板,以便遍历数组并将其内容存储到静态数组中,但我不能似乎做对了.我认为标准可能实际上不允许这种情况在一般情况下是可以理解的,但在特定情况下是不幸的(具体来说,这个.;):()
如果我可以将字符串重新映射为类似boost :: mpl :: vector_c 模板的东西,那会更好,因为我有其他代码可以正确存储它,但是从模板中取消引用数组到用作const模板参数似乎也是不允许的.
有任何想法吗?
编辑:
Psudocode示例(这有点人为,因为实际代码要大得多,我也不会像这样逐字节读取,也不会使用文字迭代到字符串的末尾.这将嵌入到数据以及某处.):
// this stores bytes in an array
template
struct x
{
static PROGMEM volatile const T data[];
};
template
PROGMEM volatile const T x::data[] = { numbers... };
void main()
{
// this will not work, but the idea is you have byte 0 as 1,
// byte 1 as 2 byte 2 as 3 byte 3 as 's', byte 4 as 'o'...
// byte 22 as 'g', byte 23 as 4, byte 24 as 5, byte 25 as 6.
typedef x xx;
for(i=0; i<20; ++i)
Serial.print(pgm_read_byte_near(&xx::data[0] + 3));
}
另请注意,我没有使用C++ 11,这是C++ 0x,可能还有扩展.