From: Tsuda kageyu Date: Tue, 16 Apr 2013 05:35:47 +0000 (+0900) Subject: Small refactoring of tbytevector.cpp X-Git-Tag: v1.9~72^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0195eef865c8ef34a3c2f5db218933515f6d2145;p=taglib Small refactoring of tbytevector.cpp --- diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 31e11d65..5fc6ded5 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -208,22 +208,21 @@ T toNumber(const ByteVector &v, bool mostSignificantByteFirst) return 0; } - const size_t size = sizeof(T); - - if(v.size() >= size) - { + if(v.size() >= sizeof(T)) { if(isLittleEndianSystem == mostSignificantByteFirst) return byteSwap(*reinterpret_cast(v.data())); else return *reinterpret_cast(v.data()); } + else { + T sum = 0; + for(size_t i = 0; i < v.size(); i++) { + const size_t shift = (mostSignificantByteFirst ? v.size() - 1 - i : i) * 8; + sum |= static_cast(static_cast(v[i]) << shift); + } - const uint last = std::min(v.size() - 1, size); - T sum = 0; - for(uint i = 0; i <= last; i++) - sum |= (T) uchar(v[i]) << ((mostSignificantByteFirst ? last - i : i) * 8); - - return sum; + return sum; + } } template