我尝试使用dcmtk从DICOM图像中提取示例编号。代码如下所示:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(src_path);
if (status.good())
{
OFString instanceNumber=0;
if (fileformat.getDataset()->findAndGetOFString(DCM_InstanceNumber, instanceNumber).good())
{
std::cout << "instance Number N: " << instanceNumber << std::endl;
sprintf(instanceNum, "%s\n", instanceNumber);
printf("%s\n", instanceNum);
}
else
std::cerr << "Error: cannot access instance Number!" << std::endl;
}
else
std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;
现在我得到了示例号,但是我想把示例号复制成一个字符或字符串(为了进一步编程),但是由于这个数字是一个OFString,我如何把它转换成所需的数据类型,有什么想法吗?
4条答案
按热度按时间njthzxwz1#
实际上,OFString实现了std::string的一个子集,所以如果你想得到一个“const char*”,你可以使用c_str(),就像其他人已经建议的那样。或者,你也可以用HAVE_STD_STRING来编译DCMTK,OFString将与std::string相同。
当然,所有这些在文档中也有描述。
gmol16392#
可以使用dcmtk通过findAndGetXXX方法直接读入请求的数据类型。在您的特定情况下,示例编号的VR为IS,因此要使用的方法为findAndGetSint32。请参阅:给你。
应用于您的代码:
应该在工作...
06odsfpq3#
您可以使用
c_str()
来获取const char*
,然后根据需要在此基础上创建string
。brc7rcf04#
在某些情况下(例如Debian),操作系统提供的编译包带有
DCMTK_ENABLE_STL
disabled标志,修补这个包不是一个好主意,因为那样的话你就必须重新编译依赖它的每个包。但是有时候你确实需要一个
std::string
而OFString
却不行。一般来说,要把OFString
转换成std::string
,你可以使用下面的代码片段:其还复制任何嵌入的零(如果存在的话)。