QByteArray与char、int、float(及其数组)之间的互相转化

int转4字节数组

QByteArray SCL::intTo4ByteArray(int i)
{
    QByteArray ba;
    ba.resize(4);
    ba[0] = (uchar)(0x000000ff & i);
    ba[1] = (uchar)((0x0000ff00&i)>>8);
    ba[2] = (uchar)((0x00ff0000&i)>>16);
    ba[3] = (uchar)((0xff000000&i)>>24);
    return ba;
}
int转2字节数组

QByteArray SCL::intTo2ByteArray(int i)
{
    QByteArray ba;
    ba.resize(2);
    ba[0] = (uchar)(0x000000ff & i);
    ba[1] = (uchar)((0x0000ff00&i)>>8);
    return ba;
}
int转单字节

QByteArray SCL::intToByteArray(int i)
{
    QByteArray ba;
    ba.resize(1);
    ba[0] = (uchar)(0x000000ff & i);
    return ba;
}
字节数组转int

int SCL::ByteArray4ToInt(const QByteArray &bytes)
{
    int i = bytes[0] & 0x000000FF;
    i |= ((bytes[1] <<8)&0x0000FF00);
    i |= ((bytes[2] <<16)&0x00FF0000);
    i |= ((bytes[3] <<24)&0xFF000000);
    return i;
}

QByteArray与char*的转换

方式1 传统方式data()和size()函数 (方便)

 
  1. QByteArray array(10, 'Q');//初始化

  2. //array 赋值等代码

  3. //...

  4. // 转化

  5. char *buf;//只是一个指针

  6. int len;//buf的长度

  7. buf = array.data();

  8. len = array.size();

方式2 memcpy()方式 (灵活)

 
  1. QByteArray array(9,'Q');

  2. char buf[10];//数组

  3. int len_array = array.size();

  4. int len_buf = sizeof(buf);

  5. int len = qMin( len_array, len_buf );

  6. // 转化

  7. memcpy( buf, array, len );

2 char* 转 QByteArray 

方法1 利用构造函数 (方便)

 
  1. char buf[10];

  2. //给buf赋值

  3. for (int i = 0; i < 10; i++)

  4. {

  5. buf[i] = (i + 1) % 3;//其中存在'\0'元素

  6. }

  7. // 转化

  8. QByteArray array;

  9. array = QByteArray(buf, 10);//因为buf[]中有`\0`,必须要写上数据长度;否则,数据会直接截断,丢失数据

 方式2 memcpy()方式 (灵活)

 
  1. char buf[10];

  2. //给buf赋值

  3. for (int i = 0; i < 10; i++)

  4. {

  5. buf[i] = (i + 1) % 3;//其中存在'\0'元素

  6. }

  7. // 转化

  8. QByteArray array;

  9. array.resize(sizeof(buf));//重置数据大小

  10. memcpy(array.data(), buf, sizeof(buf));//copy数据

3.1. int 与 QByteArray 互转 

[1] int 转 QByteArray

 
  1. // int 转 QByteArray

  2. int intVar = 199;

  3. QByteArray array;

  4. int len_intVar = sizeof(intVar);

  5. array.resize(len_intVar);

  6. memcpy(array.data(), &intVar, len_intVar);

[2]QByteArray 转 int[]

 
  1. // QByteArray 转 int[]

  2. // array 数据接上面

  3. int outIntVar[4];

  4. memcpy(&outIntVar, array.data(), len_intVar);

  5. //memcpy(&outIntVar, array, len_intVar);//此行代码与上句通用

4.1. float[] 与 QByteArray 互转

[1] float[] 转 QByteArray

 
  1. // float[] 转 QByteArray

  2. float fVar[4] = { 1.1, 2.3, 9.5, 0.2 };//初始化变量赋值

  3. QByteArray array;

  4. int len_fVar = sizeof(fVar); // 4*4 = 16 (一个float占4个字节)

  5. array.resize(len_intVar);

  6. memcpy(array.data(), &fVar, len_fVar);

[2]QByteArray 转 float[]

 
  1. // QByteArray 转 float[]

  2. float outFvar[4];

  3. memcpy(&outIntVar, array.data(), len_fVar);

  4. //memcpy(&outFvar, array, len_fVar);//此行代码与上句通用

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值