Sdílet prostřednictvím


codecvt Třída

Šablona třídy, která popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí. Může řídit převody mezi sekvencí hodnot používaných ke kódování znaků v programu a posloupnosti hodnot používaných ke kódování znaků mimo program.

Syntaxe

template <class CharType, class Byte, class StateType>
class codecvt : public locale::facet, codecvt_base;

Parametry

CharType
Typ používaný v rámci programu ke kódování znaků.

Byte
Typ použitý ke kódování znaků mimo program.

StateType
Typ, který lze použít k reprezentaci průběžných stavů převodu mezi interními a externími typy znázornění znaků.

Poznámky

Šablona třídy popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí, k řízení převodů mezi posloupností hodnot typu CharType a posloupností hodnot typu Byte. Třída StateType charakterizuje transformaci - a objekt třídy StateType ukládá všechny nezbytné informace o stavu během převodu.

Vnitřní kódování používá reprezentaci s pevným počtem bajtů na znak, obvykle typ char nebo typ wchar_t.

Stejně jako u jakékoli omezující vlastnosti národního prostředí má statický objekt id počáteční uloženou hodnotu nuly. První pokus o přístup k uložené hodnotě ukládá jedinečnou kladnou hodnotu v id.

Verze šablony do_in a do_out vždy vrátit codecvt_base::noconv.

Standardní knihovna C++ definuje několik explicitních specializace:

template<>
codecvt<wchar_t, char, mbstate_t>

převede mezi wchar_t sekvencemi a char sekvencemi.

template<>
codecvt<char16_t, char, mbstate_t>

převádí mezi char16_t sekvencemi kódovanými jako UTF-16 a char sekvencemi kódovanými jako UTF-8.

template<>
codecvt<char32_t, char, mbstate_t>

převádí mezi char32_t sekvencemi kódovanými jako UTF-32 (UCS-4) a char sekvencemi kódovanými jako UTF-8.

Konstruktory

Konstruktor Popis
codecvt Konstruktor pro objekty třídy codecvt , které slouží jako omezující vlastnost národního prostředí pro zpracování převodů.

Typedefs

Název typu Popis
extern_type Typ znaku, který se používá pro externí reprezentace.
intern_type Typ znaku, který se používá pro interní reprezentace.
state_type Typ znaku, který se používá k reprezentaci průběžných stavů během převodu mezi interními a externími znázorněními.

Členské funkce

Členová funkce Popis
always_noconv Ověřuje, zda je nutné provést nějaké převody.
do_always_noconv Virtuální funkce volaná k ověření, zda je nutné provést nějaké převody.
do_encoding Virtuální funkce, která testuje, jestli je kódování streamu Byte závislé na stavu, zda je poměr mezi Byte hodnotami použitými a CharType vytvořenými hodnotami konstantní, a pokud ano, určuje hodnotu tohoto poměru.
do_in Virtuální funkce volaná k převodu posloupnosti vnitřních Byte hodnot na sekvenci externích CharType hodnot.
do_length Virtuální funkce, která určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento počet Byte hodnot.
do_max_length Virtuální funkce, která vrací maximální počet externích bajtů nezbytných k vytvoření jednoho interního CharType.
do_out Virtuální funkce volaná k převodu posloupnosti vnitřních CharType hodnot na sekvenci externích bajtů.
do_unshift Virtuální funkce volaná k poskytnutí Byte hodnot potřebných při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot.
encoding Testuje, jestli je kódování datového Byte proudu závislé na stavu, zda je poměr mezi Byte použitými hodnotami a CharType hodnotami produkovaných konstantní, a pokud ano, určuje hodnotu tohoto poměru.
in Převede externí reprezentaci sekvence Byte hodnot na vnitřní reprezentaci sekvence CharType hodnot.
length Určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento Byte počet hodnot.
max_length Vrátí maximální počet externích Byte hodnot potřebných k vytvoření jedné vnitřní CharTypehodnoty .
out Převede sekvenci vnitřních CharType hodnot na sekvenci externích Byte hodnot.
unshift Poskytuje externí Byte hodnoty potřebné při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot.

Požadavky

Záhlaví: <locale>

Obor názvů: std

codecvt::always_noconv

Testuje, zda není nutné provádět žádné převody.

bool always_noconv() const throw();

Návratová hodnota

Logická hodnota, která je true v případě, že není nutné provádět žádné převody. false Pokud je potřeba provést aspoň jednu hodnotu.

Poznámky

Členová funkce vrátí do_always_noconv.

Příklad

// codecvt_always_noconv.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc ( "German_Germany" );
   bool result1 = use_facet<codecvt<char, char, mbstate_t>>
      ( loc ).always_noconv( );

   if ( result1 )
      cout << "No conversion is needed." << '\n';
   else
      cout << "At least one conversion is required." << '\n';

   bool result2 = use_facet<codecvt<wchar_t, char, mbstate_t>>
      ( loc ).always_noconv( );

   if ( result2 )
      cout << "No conversion is needed." << '\n';
   else
      cout << "At least one conversion is required." << '\n';
}
No conversion is needed.
At least one conversion is required.

codecvt::codecvt

Konstruktor pro objekty kodeku třídy, které slouží jako omezující vlastnost národního prostředí pro zpracování převodů.

explicit codecvt(size_t refs = 0);

Parametry

refs
Celočíselná hodnota použitá k určení typu správy paměti pro objekt.

Poznámky

Možné hodnoty parametru refs a jejich významnosti jsou:

  • 0: Životnost objektu je spravována národními prostředími, které ho obsahují.

  • 1: Životnost objektu musí být spravována ručně.

  • 2: Tyto hodnoty nejsou definovány.

Konstruktor inicializuje svůj locale::facet základní objekt s locale::facet(refs).

codecvt::do_always_noconv

Virtuální funkce volaná k otestování, jestli není potřeba provádět žádné převody.

virtual bool do_always_noconv() const throw();

Návratová hodnota

Chráněná virtuální členová funkce vrátí true pouze v případě, že každé volání do_in nebo do_out vrátí .noconv

Verze šablony vždy vrátí true.

Příklad

Podívejte se na příklad always_noconv, který volá do_always_noconv.

codecvt::do_encoding

Virtuální funkce, která testuje, jestli je kódování streamu Byte závislé na stavu, zda je poměr mezi Byte hodnotami použitými a CharType produkovaných hodnotami konstantní a pokud ano, určuje hodnotu tohoto poměru.

virtual int do_encoding() const throw();

Návratová hodnota

Chráněná virtuální členová funkce vrátí:

  • -1, pokud je kódování sekvencí typu extern_type závislé na stavu.

  • 0, pokud kódování zahrnuje sekvence různých délek.

  • N, pokud kódování zahrnuje pouze sekvence délky N

Příklad

Podívejte se na příklad kódování, který volá do_encoding.

codecvt::d o_in

Virtuální funkce volaná k převodu sekvence externích Byte hodnot na sekvenci vnitřních CharType hodnot.

virtual result do_in(
    StateType& state,
    const Byte* first1,
    const Byte* last1,
    const Byte*& next1,
    CharType* first2,
    CharType* last2,
    CharType*& next2,) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek sekvence, která se má převést.

last1
Ukazatel na konec sekvence, která se má převést.

next1
Ukazatel nad konec převedené sekvence na první nepřevrácený znak.

first2
Ukazatel na začátek převedené sekvence

last2
Ukazatel na konec převedené sekvence.

next2
Ukazatel na CharType ten, který přichází po posledním převodu CharType, na první nealterovaný znak v cílové sekvenci.

Návratová hodnota

Návrat, který označuje úspěch, částečný úspěch nebo selhání operace. Funkce vrátí:

  • codecvt_base::error pokud je zdrojová sekvence špatně vytvořena.

  • codecvt_base::noconv pokud funkce neprovádí žádný převod.

  • codecvt_base::ok pokud převod proběhne úspěšně.

  • codecvt_base::partial pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod proběhl úspěšně.

Poznámky

state musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Jeho uložená hodnota je jinak nezadaná.

Příklad

Podívejte se na příklad in, který volá do_in.

codecvt::do_length

Virtuální funkce, která určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento počet Byte hodnot.

virtual int do_length(
    const StateType& state,
    const Byte* first1,
    const Byte* last1,
    size_t len2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek externí sekvence.

last1
Ukazatel na konec externí sekvence

len2
Maximální počet Byte hodnot, které může členová funkce vrátit.

Návratová hodnota

Celé číslo, které představuje počet maximálního počtu převodů, ne větší než len2 definovaný externím zdrojovým pořadím na [ first1, last1).

Poznámky

Chráněná virtuální členová funkce efektivně volá do_in( state, first1, last1, next1, buf, buf + len2, next2) stav (kopii stavu), některé vyrovnávací paměti bufa ukazatele next1 a next2.

Pak se vrátí next2 - buf. Spočítá maximální počet převodů, ne větší než délka2 definovaný zdrojová posloupnost na [ first1, last1).

Verze šablony vždy vrací menší hodnotu last1 - first1 a .len2

Příklad

Podívejte se na příklad length, který volá do_length.

codecvt::do_max_length

Virtuální funkce, která vrací maximální počet externích Byte hodnot potřebných k vytvoření jedné vnitřní CharType.

virtual int do_max_length() const throw();

Návratová hodnota

Maximální počet hodnot potřebných Byte k vytvoření jednoho CharType.

Poznámky

Chráněná virtuální členová funkce vrátí největší povolenou hodnotu, kterou lze vrátit do_length( first1, last1, 1) pro libovolné platné hodnoty first1 a last1.

Příklad

Podívejte se na příklad max_length, který volá do_max_length.

codecvt::do_out

Virtuální funkce volaná k převodu posloupnosti vnitřních CharType hodnot na sekvenci externích Byte hodnot.

virtual result do_out(
    StateType& state,
    const CharType* first1,
    const CharType* last1,
    const CharType*& next1,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek sekvence, která se má převést.

last1
Ukazatel na konec sekvence, která se má převést.

next1
Odkaz na ukazatel na první nepřevrácený CharTypeukazatel po posledním CharType převodu.

first2
Ukazatel na začátek převedené sekvence

last2
Ukazatel na konec převedené sekvence.

next2
Odkaz na ukazatel na první nepřevrácený Byteukazatel po posledním Byte převodu.

Návratová hodnota

Funkce vrátí:

  • codecvt_base::error pokud je zdrojová sekvence špatně vytvořena.

  • codecvt_base::noconv pokud funkce neprovádí žádný převod.

  • codecvt_base::ok pokud převod proběhne úspěšně.

  • codecvt_base::partial pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.

Poznámky

state musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Jeho uložená hodnota je jinak nezadaná.

Příklad

Podívejte se na příklad , který volá do_out.

codecvt::do_unshift

Virtuální funkce volaná k poskytnutí Byte hodnot potřebných při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot.

virtual result do_unshift(
    StateType& state,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first2
Ukazatel na první pozici v cílovém rozsahu.

last2
Ukazatel na poslední pozici v cílovém rozsahu.

next2
Ukazatel na první nealterovaný prvek v cílové sekvenci.

Návratová hodnota

Funkce vrátí:

  • codecvt_base::error Pokud stav představuje neplatný stav

  • codecvt_base::noconv pokud funkce neprovádí převod

  • codecvt_base::ok Pokud převod proběhne úspěšně

  • codecvt_base::partial Pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně

Poznámky

Chráněná virtuální členová funkce se pokusí převést zdrojový prvek CharType(0) na cílovou sekvenci, kterou ukládá v [ first2, last2s výjimkou ukončujícího prvku Byte(0). Vždy se ukládá v next2 ukazateli na první nealterovaný prvek v cílové sekvenci.

State musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Převod zdrojového prvku CharType(0) obvykle ponechá aktuální stav v počátečním stavu převodu.

Příklad

Podívejte se na příklad unshift, který volá do_unshift.

codecvt::encoding

Testuje, jestli je kódování datového Byte proudu závislé na stavu, zda je poměr mezi Byte použitými hodnotami a CharType hodnotami produkovaných konstantní, a pokud ano, určuje hodnotu tohoto poměru.

int encoding() const throw();

Návratová hodnota

Pokud je vrácená hodnota kladná, jedná se o konstantní počet znaků potřebných Byte k vytvoření znaku CharType .

Chráněná virtuální členová funkce vrátí:

  • -1, pokud je kódování sekvencí typu extern_type závislé na stavu.

  • 0, pokud kódování zahrnuje sekvence různých délek.

  • N, pokud kódování zahrnuje pouze sekvence délky N.

Poznámky

Členová funkce vrátí do_encoding.

Příklad

// codecvt_encoding.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc ( "German_Germany" );
   int result1 = use_facet<codecvt<char, char, mbstate_t>> ( loc ).encoding ( );
   cout << result1 << '\n';
   result1 = use_facet<codecvt<wchar_t, char, mbstate_t>> ( loc ).encoding( );
   cout << result1 << '\n';
   result1 = use_facet<codecvt<char, wchar_t, mbstate_t>> ( loc ).encoding( );
   cout << result1 << '\n';
}
1
1
1

codecvt::extern_type

Typ znaku, který se používá pro externí reprezentace.

typedef Byte extern_type;

Poznámky

Typ je synonymem pro parametr Bytešablony .

codecvt::in

Převede externí reprezentaci sekvence Byte hodnot na vnitřní reprezentaci sekvence CharType hodnot.

result in(
    StateType& state,
    const Byte* first1,
    const Byte* last1,
    const Byte*& next1,
    CharType* first2,
    CharType* last2,
    CharType*& next2,) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek sekvence, která se má převést.

last1
Ukazatel na konec sekvence, která se má převést.

next1
Ukazatel nad konec převedené sekvence na první nekonvertovaný znak.

first2
Ukazatel na začátek převedené sekvence

last2
Ukazatel na konec převedené sekvence.

next2
Ukazatel na CharType ten, který následuje po posledním převodu Chartype na první nealterovaný znak v cílové sekvenci.

Návratová hodnota

Návrat, který označuje úspěch, částečný úspěch nebo selhání operace. Funkce vrátí:

  • codecvt_base::error pokud je zdrojová sekvence špatně vytvořena.

  • codecvt_base::noconv pokud funkce neprovádí žádný převod.

  • codecvt_base::ok pokud převod proběhne úspěšně.

  • codecvt_base::partial pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.

Poznámky

state musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce podle potřeby změní uloženou hodnotu tak, aby odrážela aktuální stav úspěšného převodu. Po částečném převodu je nutné nastavit, state aby se převod mohl obnovit při přijetí nových znaků.

Členová funkce vrátí do_in( state, first1, last1, next1, first2, last2, next2).

Příklad

// codecvt_in.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
   const char* pszExt = "This is the string to be converted!";
   wchar_t pwszInt [LEN+1];
   memset(&pwszInt[0], 0, (sizeof(wchar_t))*(LEN+1));
   const char* pszNext;
   wchar_t* pwszNext;
   mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
   locale loc("C");//English_Britain");//German_Germany
   int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
     ( loc ).in( state,
          pszExt, &pszExt[strlen(pszExt)], pszNext,
          pwszInt, &pwszInt[strlen(pszExt)], pwszNext );
   pwszInt[strlen(pszExt)] = 0;
   wcout << ( res!=codecvt_base::error ?  L"It worked! " : L"It didn't work! " )
       << L"The converted string is:\n ["
       << &pwszInt[0]
       << L"]" << '\n';
   exit(-1);
}
It worked! The converted string is:
[This is the string to be converted!]

codecvt::intern_type

Typ znaku, který se používá pro interní reprezentace.

typedef CharType intern_type;

Poznámky

Typ je synonymem pro parametr CharTypešablony .

codecvt::length

Určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento Byte počet hodnot.

int length(
    const StateType& state,
    const Byte* first1,
    const Byte* last1,
    size_t len2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek externí sekvence.

last1
Ukazatel na konec externí sekvence

len2
Maximální počet bajtů, které může členová funkce vrátit.

Návratová hodnota

Celé číslo, které představuje počet maximálního počtu převodů, nikoli větší než len2, definovaný externím zdrojovým pořadím na [ first1, last1).

Poznámky

Členová funkce vrátí do_length( state, first1, last1, len2).

Příklad

// codecvt_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
   const char* pszExt = "This is the string whose length is to be measured!";
   mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
   locale loc("C"); // English_Britain"); //German_Germany
   int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
     ( loc ).length( state,
          pszExt, &pszExt[strlen(pszExt)], LEN );
   cout << "The length of the string is: ";
   wcout << res;
   cout << "." << '\n';
   exit(-1);
}
The length of the string is: 50.

codecvt::max_length

Vrátí maximální počet externích Byte hodnot potřebných k vytvoření jedné vnitřní CharTypehodnoty .

int max_length() const throw();

Návratová hodnota

Maximální počet hodnot potřebných Byte k vytvoření jednoho CharType.

Poznámky

Členová funkce vrátí do_max_length.

Příklad

// codecvt_max_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc( "C");//English_Britain" );//German_Germany
   int res = use_facet<codecvt<char, char, mbstate_t>>
     ( loc ).max_length( );
   wcout << res << '\n';
}
1

codecvt::out

Převede sekvenci vnitřních CharType hodnot na sekvenci externích Byte hodnot.

result out(
    StateType& state,
    const CharType* first1,
    const CharType* last1,
    const CharType*& next1,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first1
Ukazatel na začátek sekvence, která se má převést.

last1
Ukazatel na konec sekvence, která se má převést.

next1
Odkaz na ukazatel na první nepřekonvertovaný CharType po posledním CharType převodu.

first2
Ukazatel na začátek převedené sekvence

last2
Ukazatel na konec převedené sekvence.

next2
Odkaz na ukazatel na první nepřevrácený Byte po posledním převodu Byte.

Návratová hodnota

Členová funkce vrátí do_out( state, first1, last1, next1, first2, last2, next2).

Poznámky

Další informace najdete na webu codecvt::do_out.

Příklad

// codecvt_out.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
#include <wchar.h>
using namespace std;
#define LEN 90
int main( )
{
    char pszExt[LEN + 1];
    const wchar_t* pwszInt = L"This is the wchar_t string to be converted.";
    memset(&pszExt[0], 0, (sizeof(char)) * (LEN + 1));
    char* pszNext;
    const wchar_t* pwszNext;
    mbstate_t state;
    locale loc("C");//English_Britain");//German_Germany
    int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
        (loc).out(state,
            pwszInt, &pwszInt[wcslen(pwszInt)], pwszNext,
            pszExt, &pszExt[wcslen(pwszInt)], pszNext);
    pszExt[wcslen(pwszInt)] = 0;
    cout << (res != codecvt_base::error ? "It worked: " : "It didn't work: ")
        << "The converted string is:\n ["
        << &pszExt[0]
        << "]" << '\n';

}
It worked: The converted string is:
[This is the wchar_t string to be converted.]

codecvt::state_type

Typ znaku, který se používá k reprezentaci průběžných stavů během převodu mezi interními a externími znázorněními.

typedef StateType state_type;

Poznámky

Typ je synonymem pro parametr StateTypešablony .

codecvt::unshift

Byte Poskytuje hodnoty potřebné při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot.

result unshift(
    StateType& state,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Parametry

state
Stav převodu, který se udržuje mezi voláními členské funkce.

first2
Ukazatel na první pozici v cílovém rozsahu.

last2
Ukazatel na poslední pozici v cílovém rozsahu.

next2
Ukazatel na první nealterovaný prvek v cílové sekvenci.

Návratová hodnota

Funkce vrátí:

  • codecvt_base::error pokud stav představuje neplatný stav.

  • codecvt_base::noconv pokud funkce neprovádí žádný převod.

  • codecvt_base::ok pokud převod proběhne úspěšně.

  • codecvt_base::partial pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.

Poznámky

Chráněná virtuální členová funkce se pokusí převést zdrojový prvek CharType(0) na cílovou sekvenci, kterou ukládá v [ first2, last2s výjimkou ukončujícího prvku Byte(0). Vždy se ukládá v next2 ukazateli na první nealterovaný prvek v cílové sekvenci.

state musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce podle potřeby změní uloženou hodnotu tak, aby odrážela aktuální stav úspěšného převodu. Převod zdrojového prvku CharType(0) obvykle ponechá aktuální stav v počátečním stavu převodu.

Členová funkce vrátí do_unshift( state, first2, last2, next2 ).

Viz také

<locale>
Znakové stránky
Názvy národních prostředí, jazyky a řetězce země/oblasti
Bezpečný přístup z více vláken ve standardní knihovně C++