在 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, "%sn", instanceNumber);
printf("%sn", instanceNum);
}
else
std::cerr << "Error: cannot access instance Number!" << std::endl;
}
else
std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;
现在我得到了实例编号,但我想将实例编号复制到字符或字符串(用于进一步编程)。但是由于数字是 OFString,我如何将其转换为所需的数据类型。有什么想法吗?
实际上,OFString 实现了 std::string 的一个子集,所以如果你想像其他人已经建议的那样获得一个"const char*",你可以使用 c_str()。或者,您也可以使用定义HAVE_STD_STRING编译 DCMTK,OFString 将与 std::string 相同。
当然,所有这些也在文档中进行了描述。
您可以使用 dcmtk 通过 findAndGetXXX 方法直接读取请求的数据类型。在您的特定情况下,实例编号的 VR 是 IS,因此要使用的方法是 findAndGetSint32。见:这里。
应用于您的代码:
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, "%dn", instanceNumber);
printf("%dn", instanceNum);
}
else
std::cerr << "Error: cannot access instance Number!" << std::endl;
}
else
std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;
应该工作...
您可以使用c_str()
来获取const char*
,并根据需要基于该string
创建。
std::string s(instanceNumber.c_str());
在某些情况下(例如 Debian),操作系统会提供禁用标志DCMTK_ENABLE_STL
编译的软件包。修补包不是一个好主意,因为这样你就必须重新编译依赖于它的每个包。
但有时你确实需要一个std::string
,而OFString
是行不通的。若要将OFString
转换为一般std::string
,可以使用以下代码片段:
std::string str(ofstr.data(), ofstr.length());
如果有的话,它还会复制任何嵌入的零。
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 尝试将字符串/字符转换为整数会产生意外结果
- 为什么没有访问所有字符串字符?
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 如何将字符串字符与结构数组进行比较?
- 将单个字符串/字符输入串行监视器
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++ C 样式字符串/字符数组的大小 - 优化
- 读取字符串字符时出错
- C++ 使用 Strtok 读取字符串字符时出错
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 在另一个字符串中逐个复制字符串字符
- 将字符串字符映射到矢量
- MBED RTOS将Float转换为字符串/字符阵列
- 如何使用字符串字符数组中的 ++ 运算符访问下一个字符串
- 如何比较C++中的单个字符串字符?
- 内部字符串/字符如何在 int 和 float 中存储
- 将十六进制转换为可打印的字符串/字符
- wcscpy_s后读取字符串字符时出错
- 检查字符串字符和长度