要用SQLite資料庫去保存一段定長的char型數組,裡面可能有\0等字符,所以當作字符串varchar處理鐵定丟失數據,所以要用二進位保存BLOB,這樣對應的QT數據類型要用QByteArray進行處理,原來只用到QByteArray轉換成 char* 類型,其它的轉換還沒搞過,一弄發現還是有些門道,為了以後不再繼續造輪子,就先寫出來,標記一下。
2.QByteArray與char*的轉換2.1 QByteArray 轉 char*方式1 傳統方式data()和size()函數 (方便)QByteArray array(10, 'Q');
char *buf;int len;buf = array.data();len = array.size();方式2 memcpy()方式 (靈活)QByteArray array(9,'Q');char buf[10];int len_array = array.size();int len_buf = sizeof(buf);int len = qMin( len_array, len_buf );
memcpy( buf, array, len );2.2 char* 轉 QByteArray方法1 利用構造函數 (方便)char buf[10];for (int i = 0; i < 10; i++){ buf[i] = (i + 1) % 3;}
QByteArray array;array = QByteArray(buf, 10);方式2 memcpy()方式 (靈活)char buf[10];for (int i = 0; i < 10; i++){ buf[i] = (i + 1) % 3;}
QByteArray array;array.resize(sizeof(buf));memcpy(array.data(), buf, sizeof(buf));
3.QByteArray與int 以及int[] 的轉換3.1. int 與 QByteArray 互轉[1] int 轉 QByteArrayint intVar = 199;
QByteArray array;int len_intVar = sizeof(intVar);array.resize(len_intVar);memcpy(array.data(), &intVar, len_intVar);
[2]QByteArray 轉 intint outIntVar;memcpy(&outIntVar, array.data(), len_intVar);
3.2. int[] 與 QByteArray 互轉[1] int[] 轉 QByteArrayint intVar[4] = {1,2,9,0};
QByteArray array;int len_intVar = sizeof(intVar);array.resize(len_intVar);memcpy(array.data(), &intVar, len_intVar);[2]QByteArray 轉 int[]int outIntVar[4];memcpy(&outIntVar, array.data(), len_intVar);4.QByteArray與float 以及float[] 的轉換其實完全可以參考第3節,int的用法.
4.1. float[] 與 QByteArray 互轉[1] float[] 轉 QByteArrayfloat fVar[4] = { 1.1, 2.3, 9.5, 0.2 };
QByteArray array;int len_fVar = sizeof(fVar); array.resize(len_intVar);memcpy(array.data(), &fVar, len_fVar);[2]QByteArray 轉 float[]float outFvar[4];memcpy(&outIntVar, array.data(), len_fVar);4.2. float 與 QByteArray 互轉可以安全參考int。
5.// QString轉QByteArray方法
//Qt5.3.2
QString str("hello");
QByteArray bytes = str.toUtf8(); // QString轉QByteArray方法1
QString str("hello");
QByteArray bytes = str.toLatin1(); // QString轉QByteArray方法2
//QByteArray轉QString方法
//Qt5.3.2
QByteArray bytes("hello world");
QString string = bytes; // QByteArray轉QString方法1
QByteArray bytes("hello world");
QString string;
string.prepend(bytes);// QByteArray轉QString方法2
qDebug() << string;
QByteArray類同樣不以』\0』為結尾:如
QByteArray bytes;
bytes.resize(5);
bytes[0] = '1';
bytes[1] = '2';
bytes[2] = '3';
bytes[3] = '\0';
bytes[4] = 'a';
cout << bytes << endl;