【发布时间】:2012-06-07 20:32:31
【问题描述】:
我有一些数据必须匹配某个数据包协议。我将所说的数据作为 std::string 获取。
我需要取一些整数值并将它们放在字符串中的某些位置。我不想将整数转换为字符串值;我想复制实际的字节值。
例如,如果我的字符串是“abcdefg”,并且我有一个 2 字节短的值,我想将其放在第一个位置,我不想要“a25defg”。我想要 "a" + 0x00 + 0x19 + "defg"(请原谅我。这是我能想到的最好的方式来说明我想要什么)。
有没有使用常规 C++ 字符串的巧妙方法?由于系统要求,我在这里不可能升压。
据我所见,stringstream 可能会有所帮助,但我看到的所有示例都将数字/短/整数转换为它的 ascii 版本,这不是我想要的。
我可以用 char 数组轻松做到这一点,但我想知道我是否可以用字符串做到这一点。
谢谢。
【问题讨论】:
-
影响问题的因素有很多。首先是协议使用
std::string是因为它是基于文本的协议还是std::string是对std::vector<unsigned char>的滥用,协议会处理字符串中的NUL字符吗?协议中字符串的大小是固定的吗? -
是的,让我们假设。在此代码被命中之前会检查字节顺序。
-
好问题。字符串是固定大小的,因为协议是定义的。是的,协议确实需要空字符并且可以处理它们,这是使用 std::string 的原因之一。我知道如何使用 char 数组来做到这一点。我真的很好奇如何用 std::string 完成它。
-
@DavidRodríguez-dribeas 是的,std::string 可以包含
\0字符。这是 std::strings 优于 C 类型字符串的众多优势之一! -
协议在备用位置使用大量 0x00 作为占位符。 0x00 是合法的。
标签: c++ string casting byte stringstream