我发现了以下的C++代码(注释是我自己加的):
// frame_name is a char array
// prefix is std::string
// k is a for loop counter
// frames is a std::vector string
sprintf(frameName, "%s_%0*s.bmp", prefix.c_str(), k, frames[k].c_str());
我接着尝试将它翻译成C#。
// prefix is string
// k is a for loop counter
// frames is List<string>
string frameName = string.Format("{0}_(what goes in here?).bmp", prefix, k, frames[k]);
基本上,C#中与C++格式字符串“%s%0 * s.bmp”等效的是什么?
编辑,@Mark Byers:
我尝试了您的代码并制作了一个小测试程序:
static void Main(string[] args)
{
List<string> frames = new List<string>();
frames.Add("blah");
frames.Add("cool");
frames.Add("fsdt");
string prefix = "prefix";
int n = 2;
int k = 0;
string frameName = string.Format("{0}_{1}.bmp", prefix, frames[k].PadLeft(n, '0'));
Console.WriteLine(frameName); // outputs prefix_blah.bmp, should output prefix_00blah.bmp
Console.ReadLine();
}
由于某些原因,它没有填充。
编辑:已解决;如果n = 2,则不会填充。
k
用于两个不同的目的吗? - Mark Byerss
转换结合使用的0
修饰符是未定义行为。 - Thanatos