И кто бы мог подумать?inline bool operator<(const QByteArray &a1, const QByteArray &a2)
{ return strcmp(a1, a2) < 0; }
inline bool operator==(const QByteArray &a1, const QByteArray &a2)
{ return (a1.size () == a2.size()) && (memcmp(a1, a2, a1.size())==0); }(
Read more... )
Comments 2
Чего-то... на глаз ошибку и не видно. Ну-у-у... разве что Char объявлен как wide, тогда м.б. такой эффект можно достичь?.. Хм.
Но под отладчиком-то ошибка должна быстро находиться, я полагаю... Ы?
Reply
strcmp - сравнивает строки до '\0' символа, соответственно strcmp(QByteArray::fromHex("0007"), QByteArray::fromHex("0018")) == 0
а memcmp - сравнивает как пологается и '\0' в том числе аж до указанного количества, и как результат
соответственно memcmp(QByteArray::fromHex("0007"), QByteArray::fromHex("0018"), 2) != 0
плюс сравнение размеров.
Вообщем кучу времени потратил пока дошло, а дебаггером не пользовался да и не помогло бы. Сразу было видно, что либо я где-то не очень хорошо юзаю QByteArray, что данные меняются когда они уже в QMap'е как ключ (в Qt же большинство контейнеров используют ссылки на данные и copy-on-write), либо же где-то закрался QByteArray::fromRawData на данные которые меняются со временем.
Reply
Leave a comment