2016-11-30 34 views
-3

Я использую C/C++, есть ли какие-либо функции Windows или какие-либо очень быстрые способы конвертировать из любого типа в Title в const WCHAR *?Преобразование INT8 ... INT64, UINT8 ... UINT64, float, double, в WCHAR *

Так что я большой случай, когда я проверить мои данные какого типа это, после того, как он переходит в какую-то отрасль, где мне нужно, чтобы преобразовать эти данные в WCHAR *.

Так exmaple, если у меня есть 21, я хочу, чтобы это было L "21". 32.322 => L "32.322" и т.д.

Я мог бы сделать это вручную, но я бы предпочел, если есть более быстрый способ! Кажется, что эти преобразования происходят на более низком уровне.

Спасибо!

+2

[ 'станд :: to_wstring'] (http://en.cppreference.com/w/cpp/string/basic_string/to_wstring) – NathanOliver

+0

Я только что нашел один способ UInt32: WCHAR ЬиЕ [20] = L ""; swprintf (buf, L "% u", UINT32_Value); Кто-нибудь знает, поддерживает ли это преобразование, и каковы другие преобразования? – user7042812

+0

[stringstream] (http://en.cppreference.com/w/cpp/io/basic_stringstream) - отличный способ решить все ваши потребности в конверсии. Работает так же, как ostream (т. Е. «Cout»). В этом случае я предполагаю, что вы будете использовать 'wstringstream'. – Lundin

ответ

1

Вы можете использовать std::to_wstring, если используете C++ 11 или C++ 14. В противном случае использовать 'swprintf' таким образом:

Создать широкий буфер строки с соответствующим размером массива:

wchar_t wstr[32]; 

преобразовать в целое число, использовать 'swprintf' с форматом '% D':

swprintf(wstr, L"%d", 21); 

Теперь 'WSTR' содержит свой "21"

и конвертировать в плавающей точкой, используйте 'swprintf' с '%. * F' формат. Мы будем использовать максимум 3 цифры после десятичной точки (по умолчанию это 6). Таким образом, это потребовало бы меньше «wchar_t» в магазине:

swprintf(wstr, L"%.*f", 3, 32.322f); 

Теперь «WSTR» содержит ваш «32,322»

Взгляните на следующую страницу MSDN для получения дополнительной информации о «swprintf»

sprintf, swprintf

+0

Спасибо! И как я буду различать INT8, INT16 UINT8 и т. Д.? – user7042812

+0

@ user7042812 «% d» должно быть достаточно для INT8 до INT32. используйте «% ll» для INT64. используйте «% u» для неподписанных типов данных, таких как UINT8 - UINT32 и «% llu» для UINT64. –

+0

@ user7042812 для получения дополнительной информации о формате функции printf/sprintf/swprintf и т. Д., Ознакомьтесь со следующей ссылкой: http://www.cplusplus.com/reference/cstdio/printf/ –