Функция принимает на вход две части кода кириллицы (2 байта). Нужно преобразовать их в русский текст. Видимо я чего-то не понимаю, прошу помочь.
wstring cyrillic(string high, string low) {
wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
wstring fPart = converter.from_bytes(high);
wstring sPart = converter.from_bytes(low);
wstring name = L"\\u" + fPart + sPart;
return name;
}
На выходе получается строка, наподобие "\u0414". Хотя цель вывести "Д".
Как я понял, в каждой из строк передается шестнадцатеричное значение байта в кодировке UTF-16. Соответственно надо только преобразовать их в число и сложить:
#include <limits>
#include <memory>
#include <cassert>
#include <cstdint>
#include <cstdio>
bool
hex_to_byte(char const * const psz_value, ::std::uint32_t & value) noexcept
{
return
(
(1 == ::sscanf_s(psz_value, "%x", ::std::addressof(value)))
&&
(value <= ::std::numeric_limits<::std::uint8_t>::max())
);
}
wchar_t
cyrillic(char const * const psz_high, char const * const psz_low) noexcept
{
wchar_t result{};
::std::uint32_t high{};
::std::uint32_t low{};
if(hex_to_byte(psz_high, high) && hex_to_byte(psz_low, low))
{
result = static_cast<wchar_t>((high << 8) | low);
}
return(result);
}
int
main()
{
assert(L'Д' == cyrillic("04", "14"));
return(0);
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как написать удаление элемента односвязного списка, если этот элемент - это значение переменной другого класса?
При составлении регулярного выражения не получается сохранить каждую часть входного путиВходная строка:
Подскажите пожалуйста, это функция для менюКаждый раз, когда сыграна какая-то из игр, я вызываю функцию чтобы вернуться с меню