if(b[i]>='2'&&b[i]<='7')fv|=b[i]-'2'+26;
}
//int to bytes
+ QByteArray r2;
for(int i=0;i<5;i++){
int j=32-(i*8);
- r.append(char((fv>>j)&0xff));
+ r2.append(char((fv>>j)&0xff));
}
+ //append bytes to result
+ if(b.size()<8)r2.resize(b.size()*5/8);
+ r.append(r2);
//shorten input
b=b.mid(8);
}
SessionID::SessionID(const QString& s, SessionID::Format f)
:SessionID(s.toLatin1(),f)
-{
-}
+{}
+
+SessionID::SessionID(const char* s, SessionID::Format f)
+ :SessionID(QByteArray(s),f)
+{}
bool SessionID::operator==(const SessionID&o) const
{
SessionID(const SessionID&);
///creates a session ID from string data
- SessionID(const QByteArray&,Format);
+ explicit SessionID(const QByteArray&,Format f=Base64);
///creates a session ID from string data
- SessionID(const QString&,Format);
+ explicit SessionID(const QString&,Format f=Base64);
+ ///creates a session ID from string data
+ ///this is a convenience overload to avoid explicit casting
+ explicit SessionID(const char*,Format f=Base64);
///copies a session ID
SessionID& operator=(const SessionID&);
QCOMPARE(s1.toString(SessionID::Base32).size(),13);
QCOMPARE(s1.toString(SessionID::Base64).size(),11);
}
+
+void STest::testFromString()
+{
+ //base 64
+ SessionID s1(QString("ABCDEF"));
+ QCOMPARE(s1,SessionID(QByteArray("ABCDEF")));
+ QCOMPARE(s1,SessionID("ABCDEF=="));
+ //conversion to string base 64
+ QCOMPARE(s1.toString(),QString("ABCDEA"));
+ QCOMPARE(s1.toString(SessionID::Base64),QString("ABCDEA"));
+ //compare with base 32
+ QCOMPARE(s1.toString(SessionID::Base32),QString("AAIIGEA"));
+ QCOMPARE(s1.toString(SessionID::Base32), SessionID("AAIIGEA",SessionID::Base32).toString(SessionID::Base32));
+ QCOMPARE(s1,SessionID("AAIIGEA",SessionID::Base32));
+ //compare with hex
+ QCOMPARE(s1.toString(SessionID::Hex),QString("00108310"));
+ QCOMPARE(s1,SessionID("00108310",SessionID::Hex));
+ //check raw import/export
+ QByteArray cmp=QByteArray::fromRawData("\000\020\203\020",4);
+ QCOMPARE(s1.toByteArray(SessionID::RawBytes),cmp);
+ QCOMPARE(s1,SessionID(cmp,SessionID::RawBytes));
+}