我试图用istringstream
从某个内存重新创建编码的wstring
。内存布局如下:使用istringstream处理可变长度的内存块
- 1个字节表示wstring编码的开始。任意这是'!'。
- n个字节以文本格式存储字符串的字符长度,例如, 0X31,0x32,0x33将是“123”,即,123个字符的字符串
- 1个字节分离器(空格字符)
- n个字节,其是构成该串,其中的wchar_t的各自2个字节的wchars 。
例如,该字节序列:
21 36 20 66 00 6F 00 6F 00
是 “6 f.o.o.!” (使用点来表示字符0)
我得到的只是一个char *指针(我们称之为pData
),以此编码数据在其中的内存块的开始。使用数据重建wstring(“foo”)的最佳方法是什么,并且还会将指针移到编码数据末尾的下一个字节?
我正在使用istringstream来允许我使用前缀字节,字符串长度和分隔符。之后,我可以计算读取多少字节并使用流的read()
函数插入适当调整大小的wstring。 问题是,如何首先将此内存放入istringstream中? I 可能先尝试构造一个字符串,然后将其传递到istringstream,例如,
std::string s((const char*)pData);
但这不起作用,因为字符串在第一个空字节处被截断。或者,我可以用字符串的其他构造函数来明确说明有多少字节使用:
std::string s((const char*)pData, len);
它的工作原理,但只有我知道什么是len
事前。鉴于数据是可变长度的,这很棘手。
这似乎是一个真正可解决的问题。我的菜鸟状态是否意味着我忽略了一个简单的解决方案?或者我用整个字符串方法吠叫错误的树?
没有缓冲“对象”我很害怕,只是一个指向内存中的BLOB 。我得到了一个指向该内存开始的指针,我需要(重新)从它创建一个wstring。我不能真正终止任何事情,因为空值是有效的数据(请参阅我的示例)。我有点知道它的大小,因为它是用数据编码的,尽管它是一个文本字符串。作为一个人,我可以很容易地解析这些数据,但我正在努力想出一种在代码中实现的优雅方式。如果您有任何具体的问题想要了解,请提出问题。 – WalderFrey 2010-02-19 14:26:21