【发布时间】:2020-04-08 07:11:30
【问题描述】:
我有一些适用于 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 位常量一起使用。我试图找到一些关于它的文档,但我还没有成功。有人经历过吗?
【问题讨论】:
-
这是未记录的原因 - 您根本不应该编写依赖于实现的代码。代码需要重写。 (此外,以下划线和大写字母开头的标识符保留用于实现。)
-
如果您引用了更多代码,那么有人可能能够对代码尝试执行的操作进行有根据的猜测,甚至显示编写代码的正确方法。
-
好吧,我认为它是一个用于将 UTF-8 字节读/写到 UTF-16 流中的 Facet。所以我想我可以用一些 Boost 实现替换所有代码
标签: c++ visual-c++