【发布时间】:2010-06-05 22:37:22
【问题描述】:
我找到了以下 C++ 代码(cmets 自己添加的):
// 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++ 格式字符串“%s_%0*s.bmp”的 C# 等效项是什么?
编辑,@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用于两个不同的目的吗? -
您确定这些格式字符串吗?具体来说:
%0*s- 根据此处的手册页,0修饰符与s转换一起是未定义的行为。 -
这是我在查看开源程序时得到的。
-
你不应该假设你得到的是正确的。检查文档。
标签: c# c++ printf string.format