Microsoft C ++ реализация std :: mbstate_t - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть устаревший код, который работает с преобразованиями 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-битными константами. Я пытаюсь найти документацию по этому поводу, но пока не добился успеха. Кто-нибудь сталкивался с этим?

1 Ответ

0 голосов
/ 08 апреля 2020

Наконец, я понял, что плохие идеи делать предположения о внутренних реализациях. Итак, я использовал #if _MSC_VER >= 1925
для своего кода + ответ отсюда: Чтение текста UTF-8 и преобразование в UTF-16 с использованием стандартного C ++ wifstream

...