QByteArray int double 转换

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


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值