Я получаю 16 бит от структуры в памяти, и мне нужно преобразовать их в строку. 16 бит представляют собой Юникод символ:Преобразование 16 бит в память в std :: string
typedef struct my_struct {
unsigned unicode : 16;
} my_struct;
я начал литье бит в неподписанный символ, который работал для значений достаточно малы, чтобы поместиться в один символе. Однако для таких символов, как «♪», он усекает неправильно. Это то, что я до сих пор:
char buffer[2] = { 0 };
wchar_t wc[1] = { 0 };
wc[0] = page->text[index].unicode;
std::cout << wc[0] << std::endl; //PRINT LINE 1
int ret = wcstombs(buffer, wc, sizeof(buffer));
if(ret < 0)
printf("SOMETHING WENT WRONG \n");
std::string my_string(buffer);
printf("%s \n", my_string.c_str()); //PRINT LINE 2
печать линия 1 в настоящее время печатает: «9834» и печать линии 2 печатает: «» (пустая строка). Я пытаюсь заставить my_string содержать '♪'.
Вы не можете поместить 16 бит в 8 бит, не теряя что-то. Ваш выбор состоит в том, чтобы преобразовать (по-видимому) UTF-16 в UTF-8 (использует несколько 8-битных символов для хранения одного 16-битного кода) или оставить его в UTF-16 (например, 'std :: wstring' содержит единицы измерения of 'wchar_t', который * может * быть UTF-16). Если ни один из них не работает, вы можете создать экземпляр 'std :: basic_string' над вашим' my_struct' напрямую: 'std :: basic_string что угодно;' –
Вы не можете положить 16 фунтов муки в 8-фунтовый мешок. –
Вы не можете поместить 16 бит в 8-бит 'char'. Почему, по-вашему, вам нужно? Возможно, просто поместите его в 'wchar_t' (или' std :: wstring'). – zindorsky