我有一个direct3d项目,它使用D3DXCreateTextureFromFile()来加载一些图像。此函数采用LPCWSTR作为文件路径。我想加载一系列连续编号的纹理(即MyImage0001.jpg,MyImage0002.jpg等)但是c ++的疯狂字符串让我感到困惑。
我如何:
for(int i=0; i < 3;i++)
{
//How do I convert i into a string path i can use with D3DXCreateTextureFromFile?
}
编辑:
我应该提到我正在使用Visual Studio 2008的编译器
答案 0 :(得分:9)
一个选项是std::swprintf
:
wchar_t buffer[256];
std::swprintf(buffer, sizeof(buffer) / sizeof(*buffer),
L"MyImage%04d.jpg", i);
您还可以使用std::wstringstream
:
std::wstringstream ws;
ws << L"MyImage" << std::setw(4) << std::setfill(L'0') << i << L".jpg";
ws.str().c_str(); // get the underlying text array
答案 1 :(得分:3)
最“C ++”的方式是使用wstringstream:
#include <sstream>
//...
std::wstringstream ss;
ss << 3;
LPCWSTR str = ss.str().c_str();
答案 2 :(得分:1)
Win32 API有多种字符串格式化功能,例如:
WCHAR buffer[SomeMaxLengthHere];
for(int i=0; i < 3;i++)
{
wsprintfW(buffer, L"%i", i);
...
}
WCHAR buffer[SomeMaxLengthHere];
for(int i=0; i < 3;i++)
{
StringCbPrintfW(buffer, sizeof(buffer), L"%i", I);
...
}
WCHAR buffer[SomeMaxLengthHere];
for(int i=0; i < 3;i++)
{
StringCchPrintfW(buffer, sizeof(buffer) / sizeof(WCHAR), L"%i", i);
...
}
仅举几例。
答案 3 :(得分:0)
wsprintf
/* wsprintf example */
#include <stdio.h>
int main ()
{
wchar_t buffer [50];
for(int i=0; i < 3;i++){
wsprintf (buffer, L"File%d.jpg", i);
// buffer now contains the file1.jpg, then file2.jpg etc
}
return 0;
}