是否有一个codecvt解码方案,目标缓冲区需要多个内部字符的空间?

问题描述:

当使用std::codecvtin方法将外部字节序列解码为内部字符序列时,是否存在内部字符的目标缓冲区需要多个内部字符的空间的情况?是否有一个codecvt解码方案,目标缓冲区需要多个内部字符的空间?

下面是参考一些代码:

// const std::locale& loc; 
// mbstate_t state; 
// const char *extern_buf_ptr; 
// const char *extern_buf_eptr; 
const std::codecvt<wchar_t, char, mbstate_t> *pcodecvt = &std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >(loc); 

wchar_t intern_char; 
wchar_t *tmp; 
std::codecvt_base::result in_res = pcodecvt->in(state, 
     extern_buf_ptr, extern_buf_eptr, extern_buf_ptr, 
     &intern_char, &intern_char + 1, tmp); 

这是我写解码来自一个Winsock SOCKET,其中用户期望“非缓冲”输入分别读取的字节一些模板代码的简化。基本上,每循环一次,一个字节被读入外部缓冲区。当in_res不是std::codecvt_base::partial时,循环终止。

我想知道的是:是否有一个场景,in()的呼叫将需要目标缓冲区中的多个内部字符空间?也就是说,是否有一种情况会使上述循环成为无限循环?

+0

请注意,'wchar_t'被定义为足够宽以容纳“系统字符集”的任何字符值。因此,假定任何'wchar_t'字符串序列都需要一个接一个地处理是合理的。 –

有一个音符§22.4.1.4.2/3到这样的程度:

basic_filebuf假定从内部到外部字符映射为1N:所使用的basic_filebuf必须能够转换角色一个内部一个codecvt面字符在一个时间

听起来像任何语言环境,这对于IO流很好,也适合您的使用。

+0

这正是我需要知道的。谢谢。 –