Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否存在编解码器VT解码场景,其中目标缓冲区需要多个内部字符的空间?_C++_Character Encoding_Codecvt - Fatal编程技术网

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);
这是我编写的一些模板代码的简化,用于解码从Winsock
SOCKET
单独读取的字节,其中用户需要“无缓冲”输入。基本上,循环的每次迭代都会将一个字节读入外部缓冲区。当
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
字符串序列都需要能够逐个处理。