Conversion from UTF32 to UTF8 for review
I used the two tables from this link as the basis for my design:
http://en.wikipedia.org/wiki/UTF-8
I would like this reviewed for algorithm correctness:
void UnicodeEncodingConversion::
toUTF8(std::vector<uint32_t>& UTF32, std::vector<uint8_t>& UTF8) {
uint8_t Byte;
uint32_t CodePoint;
UTF8.reserve(UTF32.size() * 4); // worst case
for (uint32_t N = 0; N < UTF32.size(); N++) {
CodePoint = UTF32[N];
if (CodePoint <= 0x7F) {
Byte = CodePoint;
UTF8.push_back(Byte);
}
else if (CodePoint <= 0x7FF) {
Byte = 0xC0 | (CodePoint >> 6);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else if (CodePoint <= 0xFFFF) {
Byte = 0xE0 | (CodePoint >> 12);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 6) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else if (CodePoint <= 0x10FFFF) {
Byte = 0xF0 | (CodePoint >> 18);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 12) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 6) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else
printf("%d is outside of the Unicode range!\n", CodePoint);
}
}