std::mbstate_t的可视化Microsoft C++实现



我有一些遗留代码,可以使用UTF8/16转换和wstream-s。它是在VS08-VS10上编写的,它假定mbstate_t的类型是int。它用它来检查一些状态,比如

while(_State & 0x80000000 && ...)

unsigned n = _State & 0x7FFFFFFF; 
if(n<=0x3F)...

但现在我需要用现代Visual studio编译它,而mbstate是作为一个结构体呈现的:

typedef struct _Mbstatet
{ // state of a multibyte translation
unsigned long _Wchar;
unsigned short _Byte, _State;
} _Mbstatet;

我可以猜测,在所有提供的上述操作中都需要使用_State字段。但它只有16位,而在我的传统中,它与32位常量一起使用。我正试图找到一些关于它的文档,但我还没有成功。有人经历过吗?

最后,我发现对内部实现进行假设是个坏主意。所以,我用#if _MSC_VER >= 1925
对于我的代码+这里的答案:读取UTF-8文本并使用标准C++无线流转换为UTF-16

最新更新