我正在尝试读取一些图像并复制 3D 缓冲区(矩阵缓冲区,其中每个矩阵中的信息是图像中的信息)中的信息。要使用 fopen 打开图像,我需要图像的名称(例如“pt_176118_x_0600_cand.pgm”)。对于读取多个文件,数字 0600 (start=600) 将以步长 =5 增加,直到达到 02400。所以我需要连接“pt_176118_x_”、一个数字和“_cand.pgm”。我的问题是如何做到这一点,更准确地说,如何将数字转换为字符串,然后如何转换或表示该字符串,以便 fopen 可以识别它
尽管我在这里寻找正确的解决方案,但似乎都不适合这种情况。我的代码是:
FILE *ident;
for(k=0;k<360;k++)
{ printf("\r Read slice: %d (real: %d)",k,start + step*k);
num = start+step*k;
sprintf(outString,"%s%d%s","pt_176118_x_%d",num,"_cand_test.pgm");
if( ( ident = fopen(outString,"rb")) == NULL)
{
printf(" Error opening file %s \n",outString);
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用std::string来构建字符串,并且std::to_string()整数转换为字符串。
请注意,fopen()需要一个原始 C 字符串指针:因此,给定std::string,您可以调用其c_str()方法并将其返回值传递给fopen()。
用于构建文件名的示例可编译代码如下:
#include <iostream>
#include <string>
using namespace std;
int main() {
int num = 600;
string filename = "pt_176118_x_0";
filename += to_string(num);
filename += "_cand.pgm";
cout << filename << endl;
}
Run Code Online (Sandbox Code Playgroud)
编辑
在评论中OP指出他使用的是VS2008 C++编译器,它不支持C++11std::to_string().
在这种情况下,std::ostringstream可以用作纯 C++ 替代方案(或也可以使用C 的sprintf()或):itoa()
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string BuildFilename(int num) {
ostringstream os;
os << "pt_176118_x_0" << num << "_cand.pgm";
return os.str();
}
int main() {
int num = 600;
cout << BuildFilename(num) << endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |