QByteArray 转换
在操作sqlite时 有一个种类型 为blod ,对应就是QByteArray
有时就需要将一些值 存入QBYTEARRAY,或者 从qbytearray取出值,例 如INT,DOUBLE依次放入BLOB,然后取出,相当 于数组
下面是一些转换
void intToByte(int value,int step ,QByteArray &byteArray)
{
byteArray[step] = (uchar) (0x000000ff & value);
byteArray[step+1] = (uchar) ((0x0000ff00 & value) >> 8);
byteArray[step+2] = (uchar) ((0x00ff0000 & value) >> 16);
byteArray[step+3] = (uchar) ((0xff000000 & value) >> 24);
}
int bytesToInt(QByteArray bytes,int step) {
int addr = bytes[step] & 0x000000FF;
addr |= ((bytes[step+1] << 8) & 0x0000FF00);
addr |= ((bytes[step+2] << 16) & 0x00FF0000);
addr |= ((bytes[step+3] << 24) & 0xFF000000);
return addr;
}
//举例
下面会将多个INT依次放入QBYTEARRAY
QString str="INSERT INTO temData VALUES (?)";
QList<QVariant> lstParameter;
len = _circleMap.size();
step=0;
QByteArray _modelCircleBytes;
for (size_t i =0; i < len; i ++) {
CircleItem m_CircleItem = _circleMap[i];
intToByte(m_CircleItem.Cent.x,step,_modelCircleBytes);
step=step+4;
intToByte(m_CircleItem.Cent.y,step,_modelCircleBytes);
step=step+4;
intToByte(m_CircleItem.Rad,step,_modelCircleBytes);
step=step+4;
}
lstParameter.push_back(_modelCircleBytes);
再执行数据库操作就实现将多个INT存入SQLITE的BLOB
取出时就调用另一个函数一样的操作
double的转换
//存入
step=0;
QByteArray _modelLineBytes;
for (size_t i =0; i < len; i ++) {
//K,B就double采有MEMCPY
_modelLineBytes.append(reinterpret_cast<const char*>(&(k)), sizeof(double));
step=step+sizeof(double);
_modelLineBytes.append(reinterpret_cast<const char*>(&(b)), sizeof(double));
step=step+sizeof(double);
}
取出
if(tmpByteArray.size() !=0)
{
for(int i=0;i<tmpByteArray.size()/16;i++)
{
tmpLineItem.k =*reinterpret_cast< double*>(tmpByteArray.data()+step);
step=step+sizeof(double);
tmpLineItem.b = *reinterpret_cast< double*>(tmpByteArray.data()+step);
step=step+sizeof(double);
}
}