将整数转换为格式化的LPCWSTR。 C ++

时间:2010-05-06 00:55:54

标签: c++

我有一个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的编译器

4 个答案:

答案 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有多种字符串格式化功能,例如:

wsprintf()

WCHAR buffer[SomeMaxLengthHere];
for(int i=0; i < 3;i++)
{
    wsprintfW(buffer, L"%i", i);
    ...
}

StringCbPrintf()

WCHAR buffer[SomeMaxLengthHere];
for(int i=0; i < 3;i++)
{
    StringCbPrintfW(buffer, sizeof(buffer), L"%i", I);
    ...
}

StringCchPrintf()

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;
}