public member function
<locale>

std::wstring_convert::to_bytes

byte_string to_bytes (Elem wchar);byte_string to_bytes (const Elem* wptr);byte_string to_bytes (const wide_string& wstr);byte_string to_bytes (const Elem* first, const Elem* last);
转换为字节
返回由其参数表示的wchar宽字符序列字节字符串等效项。

如果wstring_convert对象在没有显式移位状态值的情况下构造(构造函数 (1) 和 (3)),则在转换开始前会重置移位状态

参数

wchar
单个宽字符。
wptr
一个以 null 结尾的宽字符序列(一个宽 C 字符串)。
wstr
宽字符字符串。
wide_string 是一个成员类型,定义为 basic_string<Elem,char_traits<Elem>,Wide_alloc> 的别名(其中 ElemWide_alloc 分别是 wstring_convert 的第二个和第三个模板参数)。
first,last
指向序列中第一个尾部之后的宽字符的指针。转换的范围包含 firstlast 之间的所有宽字符,不包括 last 指向的宽字符

返回值

如果成功,转换产生的字节序列,作为
宽字符串.
否则,如果wstring_convert对象是用错误字节字符串构造的(构造函数 (3)),则返回此错误字符串。
否则,将抛出range_error

byte_string 是一个成员类型,定义为 basic_string<char,char_traits<char>,Byte_alloc> 的别名(其中 Byte_allocwstring_convert 的第四个模板参数)。

转换的字符数可以通过成员 converted 访问。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// converting from UTF-16 to UTF-8
#include <iostream>       // std::cout, std::hex
#include <string>         // std::string, std::u16string
#include <locale>         // std::wstring_convert
#include <codecvt>        // std::codecvt_utf8_utf16

int main ()
{
  std::u16string str16 (u"\u3084\u3042");  // UTF-16 for YAA (やあ)

  std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> cv;

  std::string str8 = cv.to_bytes(str16);

  std::cout << std::hex;

  std::cout << "UTF-8: ";
  for (char c : str8)
    std::cout << '[' << int(static_cast<unsigned char>(c)) << ']';
  std::cout << '\n';

  return 0;
}


输出

UTF-8: [e3][82][84][e3][81][82]


数据竞争

wstring_convert 对象将被修改。
将访问参数指向的序列中的元素(如果存在)。

异常安全

基本保证:如果抛出异常,对象处于有效状态。
如果函数失败,则抛出类型为 range_error 的异常。

另见