QByteArray: don't coerce negative to unsigned for any base
This follows up on commit 98666c8afc
,
which did the same for QString. If someone wants to get formatting
suitable to an unsigned value, they can cast the value to that
unsigned type and the correct overload shall pick it up.
[ChangeLog][Important Behavior Changes] QByteArray's formatting of
negative whole numbers to bases other than ten now, like QString's
(since Qt 6.0), formats the absolute value and prepends a minus sign.
Task-number: QTBUG-53706
Pick-to: 6.2
Change-Id: I91fee23d25ac0d5d5bcfcbeccbac1386627c004a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
74083c239d
commit
260168d9d7
@ -3866,7 +3866,7 @@ QByteArray QByteArray::toBase64(Base64Options options) const
|
||||
Sets the byte array to the printed value of \a n in base \a base (ten by
|
||||
default) and returns a reference to the byte array. Bases 2 through 36 are
|
||||
supported, using letters for digits beyond 9; A is ten, B is eleven and so
|
||||
on. For bases other than ten, n is treated as an unsigned integer.
|
||||
on.
|
||||
|
||||
Example:
|
||||
\snippet code/src_corelib_text_qbytearray.cpp 40
|
||||
@ -3942,7 +3942,8 @@ QByteArray &QByteArray::setNum(qlonglong n, int base)
|
||||
char buff[buffsize];
|
||||
char *p;
|
||||
|
||||
if (n < 0 && base == 10) {
|
||||
if (n < 0) {
|
||||
// Take care to avoid overflow on negating min value:
|
||||
p = qulltoa2(buff + buffsize, qulonglong(-(1 + n)) + 1, base);
|
||||
*--p = '-';
|
||||
} else {
|
||||
|
@ -598,15 +598,15 @@ inline const QByteArray operator+(char a1, const QByteArray &a2)
|
||||
#endif // QT_USE_QSTRINGBUILDER
|
||||
|
||||
inline QByteArray &QByteArray::setNum(short n, int base)
|
||||
{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(ushort(n)), base); }
|
||||
{ return setNum(qlonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(ushort n, int base)
|
||||
{ return setNum(qulonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(int n, int base)
|
||||
{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(uint(n)), base); }
|
||||
{ return setNum(qlonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(uint n, int base)
|
||||
{ return setNum(qulonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(long n, int base)
|
||||
{ return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(ulong(n)), base); }
|
||||
{ return setNum(qlonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(ulong n, int base)
|
||||
{ return setNum(qulonglong(n), base); }
|
||||
inline QByteArray &QByteArray::setNum(float n, char f, int prec)
|
||||
|
@ -425,18 +425,17 @@ void tst_QByteArray::setNum()
|
||||
QCOMPARE(a.setNum(37, 2), QByteArray("100101"));
|
||||
QCOMPARE(a.setNum(37, 36), QByteArray("11"));
|
||||
|
||||
// Negative numbers are only properly supported for base 10.
|
||||
QCOMPARE(a.setNum(short(-1), 16), QByteArray("ffff"));
|
||||
QCOMPARE(a.setNum(int(-1), 16), QByteArray("ffffffff"));
|
||||
QCOMPARE(a.setNum(qlonglong(-1), 16), QByteArray("ffffffffffffffff"));
|
||||
QCOMPARE(a.setNum(short(-1), 16), QByteArray("-1"));
|
||||
QCOMPARE(a.setNum(int(-1), 16), QByteArray("-1"));
|
||||
QCOMPARE(a.setNum(qlonglong(-1), 16), QByteArray("-1"));
|
||||
|
||||
QCOMPARE(a.setNum(short(-1), 10), QByteArray("-1"));
|
||||
QCOMPARE(a.setNum(int(-1), 10), QByteArray("-1"));
|
||||
QCOMPARE(a.setNum(qlonglong(-1), 10), QByteArray("-1"));
|
||||
|
||||
QCOMPARE(a.setNum(-123), QByteArray("-123"));
|
||||
QCOMPARE(a.setNum(0x123,16), QByteArray("123"));
|
||||
QCOMPARE(a.setNum((short)123), QByteArray("123"));
|
||||
QCOMPARE(a.setNum(0x123, 16), QByteArray("123"));
|
||||
QCOMPARE(a.setNum(short(123)), QByteArray("123"));
|
||||
|
||||
QCOMPARE(a.setNum(1.23), QByteArray("1.23"));
|
||||
QCOMPARE(a.setNum(1.234567), QByteArray("1.23457"));
|
||||
|
Loading…
Reference in New Issue
Block a user