Я пытаюсь добавить два списка uint8_t
, как будто список был отдельными целыми числами, и я получаю некоторые странные значения:
0x1000 + 0x100 + 0x10 -> 0x1210 ?????
Код выглядит следующим образом:
// values 0x123456 stored as: {12, 34, 56}
integer operator+(integer rhs){
// internal list called 'value'
std::list <uint8_t> top = value, bottom = rhs.value;
if (value.size() < rhs.value.size())
top.swap(bottom);
top.push_front(0); // extra byte for carrying over
while (bottom.size() + 1 < top.size()) // match up the byte sizes, other than the carry over
bottom.push_front(0);
bool carry = false, next_carry = false;
for(std::list <uint8_t>::reverse_iterator i = top.rbegin(), j = bottom.rbegin(); j != bottom.rend(); i++, j++){
next_carry = (((uint8_t) (*i + *j + carry)) <= std::min(*i, *j));
*i += *j + carry;
carry = next_carry;
}
if (carry)
*top.begin() = 1;
return integer(top);
}
Может кто-нибудь сказать мне, что я делаю не так?