c语言字符nul,在C++中存储非nul终止的C字符串常量

博客讨论了在微控制器编程中遇到的问题,即需要存储不包含NUL终止符的字符串。作者指出,尽管C-string的便利性,但特定场景下不允许NUL字符的需求带来了困扰。尝试使用模板和字节存储数据,但遇到了困难。提出了将字符串转换为类似boost::mpl::vector_c的表示法的愿望,以利用已有代码进行存储。博客寻求解决方案,并提供了伪代码示例说明问题。
摘要由CSDN通过智能技术生成

在任何人说,"不要这样做,因为它真的很糟糕".

我理解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,可能还有扩展.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值