Mercurial > hg > orthanc
diff OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp @ 5657:dedbf019a707
Improved parsing of multiple numerical values in DICOM tags
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Thu, 06 Jun 2024 17:55:13 +0200 |
parents | f7adfb22e20e |
children |
line wrap: on
line diff
--- a/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp Wed Jun 05 20:37:03 2024 +0200 +++ b/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp Thu Jun 06 17:55:13 2024 +0200 @@ -1978,13 +1978,27 @@ case EVR_SL: // signed long { - ok = element.putSint32(boost::lexical_cast<Sint32>(*decoded)).good(); + if (decoded->find('\\') != std::string::npos) + { + ok = element.putString(decoded->c_str()).good(); + } + else + { + ok = element.putSint32(boost::lexical_cast<Sint32>(*decoded)).good(); + } break; } case EVR_SS: // signed short { - ok = element.putSint16(boost::lexical_cast<Sint16>(*decoded)).good(); + if (decoded->find('\\') != std::string::npos) + { + ok = element.putString(decoded->c_str()).good(); + } + else + { + ok = element.putSint16(boost::lexical_cast<Sint16>(*decoded)).good(); + } break; } @@ -2023,14 +2037,28 @@ case EVR_US: // unsigned short { - ok = element.putUint16(boost::lexical_cast<Uint16>(*decoded)).good(); + if (decoded->find('\\') != std::string::npos) + { + ok = element.putString(decoded->c_str()).good(); + } + else + { + ok = element.putUint16(boost::lexical_cast<Uint16>(*decoded)).good(); + } break; } case EVR_FL: // float single-precision case EVR_OF: // other float (requires byte swapping) { - ok = element.putFloat32(boost::lexical_cast<float>(*decoded)).good(); + if (decoded->find('\\') != std::string::npos) + { + ok = element.putString(decoded->c_str()).good(); + } + else + { + ok = element.putFloat32(boost::lexical_cast<float>(*decoded)).good(); + } break; } @@ -2039,7 +2067,14 @@ case EVR_OD: // other double (requires byte-swapping) #endif { - ok = element.putFloat64(boost::lexical_cast<double>(*decoded)).good(); + if (decoded->find('\\') != std::string::npos) + { + ok = element.putString(decoded->c_str()).good(); + } + else + { + ok = element.putFloat64(boost::lexical_cast<double>(*decoded)).good(); + } break; }