函数c32rtomb
和mbrtoc32
from <cuchar>
/<uchar.h>
在 C Unicode TR ( draft ) 中描述为执行 UTF-32 1和“多字节字符”之间的转换。
(...) 如果
s
不是空指针,则该c32rtomb
函数确定表示与给出的宽字符相对应的多字节字符所需的字节数c32
(包括任何移位序列),并将多字节字符表示存储在其数组中第一个元素由 指向s
。(...)
这是什么“多字节字符表示”?我实际上对以下程序的行为感兴趣:
#include <cassert>
#include <cuchar>
#include <string>
int main() {
std::u32string u32 = U"this is a wide string";
std::string narrow = "this is a wide string";
std::string converted(1000, '\0');
char* ptr = &converted[0];
std::mbstate_t state {};
for(auto u : u32) {
ptr += std::c32rtomb(ptr, u, &state);
}
converted.resize(ptr - &converted[0]);
assert(converted == narrow);
}
它中的断言是否保证保持1?
1在定义的假设下工作__STDC_UTF_32__
。