11#include < algorithm>
2+ #include < cstdint>
23#include < libdbc/message.hpp>
34
45namespace libdbc {
@@ -14,20 +15,20 @@ bool Message::operator==(const Message& rhs) const {
1415}
1516
1617Message::ParseSignalsStatus Message::parseSignals (const std::vector<uint8_t >& data, std::vector<double >& values) const {
17- int size = data.size ();
18+ auto size = data.size ();
1819 if (size > 8 )
1920 return ParseSignalsStatus::ErrorMessageToLong; // not supported yet
2021
2122 uint64_t data_little_endian = 0 ;
2223 uint64_t data_big_endian = 0 ;
23- for (int i = 0 ; i < size; i++) {
24+ for (size_t i = 0 ; i < size; i++) {
2425 data_little_endian |= ((uint64_t )data[i]) << i * 8 ;
2526 data_big_endian = (data_big_endian << 8 ) | (uint64_t )data[i];
2627 }
2728
2829 // TODO: does this also work on a big endian machine?
2930
30- const uint32_t len = size * 8 ;
31+ const auto len = size * 8 ;
3132 uint64_t v = 0 ;
3233 for (const auto & signal : m_signals) {
3334 if (signal.is_bigendian ) {
@@ -40,33 +41,33 @@ Message::ParseSignalsStatus Message::parseSignals(const std::vector<uint8_t>& da
4041 if (signal.is_signed && signal.size > 1 ) {
4142 switch (signal.size ) {
4243 case 8 :
43- values.push_back (( int8_t )v * signal.factor + signal.offset );
44+ values.push_back (static_cast < int8_t >(v) * signal.factor + signal.offset );
4445 break ;
4546 case 16 :
46- values.push_back (( int16_t )v * signal.factor + signal.offset );
47+ values.push_back (static_cast < int16_t >(v) * signal.factor + signal.offset );
4748 break ;
4849 case 32 :
49- values.push_back (( int32_t )v * signal.factor + signal.offset );
50+ values.push_back (static_cast < int32_t >(v) * signal.factor + signal.offset );
5051 break ;
5152 case 64 :
52- values.push_back (( int64_t )v * signal.factor + signal.offset );
53+ values.push_back (static_cast < double >(v) * signal.factor + signal.offset );
5354 break ;
5455 default : {
5556 // 2 complement -> decimal
56- const int negative = (v & (1 << (signal.size - 1 ))) != 0 ;
57+ const int negative = (v & (1ull << (signal.size - 1 ))) != 0 ;
5758 int64_t nativeInt;
5859 if (negative)
59- nativeInt = v | ~((1 << signal.size ) - 1 ); // invert all bits above signal.size
60+ nativeInt = v | ~((1ull << signal.size ) - 1 ); // invert all bits above signal.size
6061 else
61- nativeInt = v & ((1 << signal.size ) - 1 ); // masking
62- values.push_back (nativeInt * signal.factor + signal.offset );
62+ nativeInt = v & ((1ull << signal.size ) - 1 ); // masking
63+ values.push_back (static_cast < double >( nativeInt) * signal.factor + signal.offset );
6364 break ;
6465 }
6566 }
6667 } else {
6768 // use only the relevant bits
6869 v = v & ((1 << signal.size ) - 1 ); // masking
69- values.push_back (v * signal.factor + signal.offset );
70+ values.push_back (static_cast < double >(v) * signal.factor + signal.offset );
7071 }
7172 }
7273 return ParseSignalsStatus::Success;
0 commit comments