Это может быть простой вопрос, но у меня есть значение в DirectXTDK, которое находится в uint32_t. Я хотел бы отобразить это, объединив его с wchar_t.
Это то, что у меня есть до сих пор -
char buffer[1];
wchar_t* ws1 = (wchar_t *)itoa(m_timer.GetFramesPerSecond(), buffer, 10), * ws2 = L" FPS";
std::wstring s(ws1);
s += std::wstring(ws2);
const wchar_t* fps = s.c_str();
// Draw Text to the screen
m_sprites->Begin();
m_font->DrawString(m_sprites.get(), L"DirectX Museum Scene", XMFLOAT2(10, 10), Colors::Yellow);
m_font->DrawString(m_sprites.get(), fps, XMFLOAT2(8, 30), Colors::Yellow);
m_sprites->End();
Проблема возникает при отображении FPS, когда пытаются отобразить мусорные символы, которые шрифт по умолчанию не может обработать. Без itoa выполнение вызовет исключение в std::wstring s(ws1).
Как я могу эффективно преобразовать uint32_t в wchar_t * для правильного отображения FPS? Спасибо!
itoa
. Вам понадобится как минимум размер буфера 2, один для FPS (если это только одна десятичная цифра) и один для завершающего нулевого символа. Но более реалистично выяснить, каков ваш максимальный FPS, и выделить достаточно места для хранения такого количества цифр + 1. Еще лучше выделить 33char
в буфере для обработки чисел длиной до 32 бит. - person JohnFilleau   schedule 25.11.2019(wchar_t *)itoa
-- Удалить слепок. Какую ошибку компилятора вы получаете? Внимательно прочтите эту ошибку — не скрывайте ее, выполняя приведение в стиле C. Со строками или строковыми типами вам следует редко, если вообще когда-либо, приводить такие вещи. Либо используйте правильные типы строк, чтобы вам не нужно было выполнять приведение типов, либо найдите правильные функции, использующие используемые вами типы строк. - person PaulMcKenzie   schedule 25.11.2019itoa
и просмотрел ту часть, где этот размер был предложен для основания = 2. Мозг пердеть на моем конце. - person JohnFilleau   schedule 25.11.2019wchar_t* ws1 = itoa(m_timer.GetFramesPerSecond(), buffer, 10)
-- Я уверен, что компилятор сказал бы вам, что это незаконно. - person PaulMcKenzie   schedule 25.11.2019