Fix TagValue::toInteger() from Latin1/UTF-8 str
This commit is contained in:
parent
381d8db895
commit
646fc4d302
|
@ -178,7 +178,7 @@ set(META_NO_TIDY ON)
|
|||
set(META_REQUIRED_CPP_UNIT_VERSION 1.14.0)
|
||||
|
||||
# find c++utilities
|
||||
find_package(c++utilities 4.8.0 REQUIRED)
|
||||
find_package(c++utilities 4.9.0 REQUIRED)
|
||||
use_cpp_utilities()
|
||||
|
||||
# find 3rd party libraries
|
||||
|
|
|
@ -170,7 +170,7 @@ int32 TagValue::toInteger() const
|
|||
case TagTextEncoding::Unspecified:
|
||||
case TagTextEncoding::Latin1:
|
||||
case TagTextEncoding::Utf8:
|
||||
return ConversionUtilities::stringToNumber<int32>(m_ptr.get());
|
||||
return ConversionUtilities::bufferToNumber<int32>(m_ptr.get(), m_size);
|
||||
case TagTextEncoding::Utf16LittleEndian:
|
||||
case TagTextEncoding::Utf16BigEndian:
|
||||
u16string u16str(reinterpret_cast<char16_t *>(m_ptr.get()), m_size / 2);
|
||||
|
@ -181,12 +181,10 @@ int32 TagValue::toInteger() const
|
|||
case TagDataType::PositionInSet:
|
||||
case TagDataType::StandardGenreIndex:
|
||||
if(m_size == sizeof(int32)) {
|
||||
auto res = *reinterpret_cast<int32 *>(m_ptr.get());
|
||||
return res;
|
||||
return *reinterpret_cast<int32 *>(m_ptr.get());
|
||||
} else {
|
||||
throw ConversionException("Can not convert assigned data to integer because the data size is not appropriate.");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw ConversionException("Can not convert binary data/picture/time span/date time to integer.");
|
||||
}
|
||||
|
|
|
@ -157,6 +157,7 @@ void TagValueTests::testString()
|
|||
"t\0\xe4\0s\0t\0"s, TagValue("\xfe\xfft\0\xe4\0s\0t\0", 10, TagTextEncoding::Utf16BigEndian).toString(TagTextEncoding::Unspecified));
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("conversion via c'tor",
|
||||
"15\xe4"s, TagValue("\xef\xbb\xbf\x31\x35ä", 7, TagTextEncoding::Utf8, TagTextEncoding::Latin1).toString(TagTextEncoding::Unspecified));
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("conversion to int", -15, TagValue(" - 156", 5, TagTextEncoding::Utf8).toInteger());
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("conversion to int", 15, TagValue("\0\x31\0\x35", 4, TagTextEncoding::Utf16BigEndian).toInteger());
|
||||
CPPUNIT_ASSERT_THROW_MESSAGE("failing conversion to int", TagValue("15ä", 4, TagTextEncoding::Utf8).toInteger(), ConversionException);
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("conversion to pos", PositionInSet(4, 15), TagValue("4 / 15", 6, TagTextEncoding::Utf8).toPositionInSet());
|
||||
|
|
Loading…
Reference in New Issue