- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 istringstream
从一些内存中重新创建编码的 wstring
。内存布局如下:
例如字节序列:
21 36 20 66 00 6f 00 6f 00
是“!6 f.o.o.” (用点表示char 0)
我得到的只是一个 char* 指针(我们称它为 pData
),指向内存块的开头,其中包含此编码数据。使用数据重建 wstring(“foo”)并将指针移动到编码数据末尾后的下一个字节的“最佳”方法是什么?
我正在尝试使用 istringstream 来允许我使用前缀字节、字符串的长度和分隔符。之后,我可以计算要读取的字节数并使用流的 read()
函数插入到适当调整大小的 wstring 中。 问题是,我如何首先将这段内存放入 istringstream?我可以先尝试构造一个字符串,然后将其传递到 istringstream,例如 p>
std::string s((const char*)pData);
但这不起作用,因为字符串在第一个空字节处被截断了。或者,我可以使用字符串的其他构造函数来明确说明要使用多少字节:
std::string s((const char*)pData, len);
这有效,但前提是我事先知道 len
是什么。鉴于数据是可变长度的,这很棘手。
这似乎是一个真正可以解决的问题。我在字符串和流方面的新手身份是否意味着我忽略了一个简单的解决方案?还是我用整个字符串方法找错了树?
最佳答案
尝试设置您的 stringstream 的 rdbuf :
char* buffer = something;
std::stringbuf *pbuf;
std::stringstream ss;
std::pbuf=ss.rdbuf();
std::pbuf->sputn(buffer, bufferlength);
// use your ss
编辑:我看到这个解决方案会遇到与您的 string(char*, len) 情况类似的问题。你能告诉我们更多关于你的缓冲区对象的信息吗?如果您不知道长度,并且它不是以 null 终止的,那么将很难处理。
关于c++ - 使用istringstream处理一个变长的内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296535/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!