Я пытаюсь извлечь номер экземпляра из изображения DICOM с помощью dcmtk. Код показан ниже:
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, как мне преобразовать его в требуемый тип данных. Какие-нибудь мысли?
Вы можете использовать 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, "%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, поэтому вы можете использовать c_str (), если хотите получить «const char *», как уже предлагали другие люди. В качестве альтернативы вы также можете скомпилировать DCMTK с определенным HAVE_STD_STRING, и OFString будет идентичен std :: string.
Все это также описано в документации, конечно.
Ты используешь c_str()
чтобы получить const char*
и создать string
основываясь на этом, если хотите.
std::string s(instanceNumber.c_str());