QByteArray int double 转换

来源:互联网 发布:js 数组增加元素 编辑:程序博客网 时间:2024/06/07 19:46

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);
                
               
            }
}


原创粉丝点击