C++ 是否存在编解码器VT解码场景,其中目标缓冲区需要多个内部字符的空间?
在方法中使用C++ 是否存在编解码器VT解码场景,其中目标缓冲区需要多个内部字符的空间?,c++,character-encoding,codecvt,C++,Character Encoding,Codecvt,在方法中使用std::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> *pcodec
std::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);
//const std::locale&loc;
//mbstate_t state;
//const char*extern_buf_ptr;
//const char*extern buf ceptr;
const std::codevt*pcodecvt=&std::use_facet(loc);
实习医生;
wchar_t*tmp;
std::codecvt_base::结果为_res=pcodecvt->in(状态,
外部,外部,外部,外部,
&实习医生和实习医生+1,tmp);
这是我编写的一些模板代码的简化,用于解码从WinsockSOCKET
单独读取的字节,其中用户需要“无缓冲”输入。基本上,循环的每次迭代都会将一个字节读入外部缓冲区。当in_res
不是std::codevt_base::partial
时,循环终止
我想知道的是:是否存在这样一种情况:在()中调用in
需要在目标缓冲区中为多个内部字符留出空间?也就是说,是否存在使上述循环成为无限循环的场景?在§22.4.1.4.2/3
中有一个注释:
basic\u filebuf
假设从内部字符到外部字符的映射是1
到N
:由basic\u filebuf
使用的codevt
方面必须能够一次将字符转换为一个内部字符
听起来任何适合IO流的语言环境都适合您使用。这正是我需要知道的。谢谢。请注意,wchar\u t
定义的宽度足以容纳“系统字符集”的任何字符值。因此,有理由假设任何wchar\u t
字符串序列都需要能够逐个处理。