在 DCMTK 中将 OFString 转换为字符串或字符
Convert OFString to string or char in DCMTK
我正在尝试使用 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,我如何将其转换为所需的数据类型。有什么想法吗?
您使用 c_str()
得到一个 const char*
并根据需要创建一个 string
。
std::string s(instanceNumber.c_str());
您可以使用 dcmtk 通过 findAndGetXXX 方法直接读入请求的数据类型。在您的特定情况下,实例编号的 VR 是 IS,因此要使用的方法是 findAndGetSint32。参见:here.
应用于您的代码:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(src_path);
if (status.good())
{
SInt32 instanceNumber=0;
if (fileformat.getDataset()->findAndGetSint32(DCM_InstanceNumber, &instanceNumber).good())
{
std::cout << "instance Number N: " << instanceNumber << std::endl;
sprintf(instanceNum, "%d\n", instanceNumber);
printf("%d\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 实现了 std::string 的一个子集,因此如果您想像其他人已经建议的那样获得 "const char*",则可以使用 c_str()。或者,您也可以使用定义的 HAVE_STD_STRING 编译 DCMTK,并且 OFString 与 std::string.
相同
当然,文档中也描述了所有这些。
我正在尝试使用 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,我如何将其转换为所需的数据类型。有什么想法吗?
您使用 c_str()
得到一个 const char*
并根据需要创建一个 string
。
std::string s(instanceNumber.c_str());
您可以使用 dcmtk 通过 findAndGetXXX 方法直接读入请求的数据类型。在您的特定情况下,实例编号的 VR 是 IS,因此要使用的方法是 findAndGetSint32。参见:here.
应用于您的代码:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(src_path);
if (status.good())
{
SInt32 instanceNumber=0;
if (fileformat.getDataset()->findAndGetSint32(DCM_InstanceNumber, &instanceNumber).good())
{
std::cout << "instance Number N: " << instanceNumber << std::endl;
sprintf(instanceNum, "%d\n", instanceNumber);
printf("%d\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 实现了 std::string 的一个子集,因此如果您想像其他人已经建议的那样获得 "const char*",则可以使用 c_str()。或者,您也可以使用定义的 HAVE_STD_STRING 编译 DCMTK,并且 OFString 与 std::string.
相同当然,文档中也描述了所有这些。