Конвертировать OFString в string или char в DCMTK

Я пытаюсь извлечь номер экземпляра из изображения 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, как мне преобразовать его в требуемый тип данных. Какие-нибудь мысли?

1

Решение

Вы можете использовать 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;

будешь работать …

1

Другие решения

На самом деле, OFString реализует подмножество std :: string, поэтому вы можете использовать c_str (), если хотите получить «const char *», как уже предлагали другие люди. В качестве альтернативы вы также можете скомпилировать DCMTK с определенным HAVE_STD_STRING, и OFString будет идентичен std :: string.

Все это также описано в документации, конечно.

2

Ты используешь c_str() чтобы получить const char* и создать string основываясь на этом, если хотите.

std::string s(instanceNumber.c_str());
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector