Qt:整型与字节数组之间的转换

ArrayUtils.h

/* ----------------------------------------------------------
 * 文件名称:ArrayUtils.h
 *
 * 作者:秦建辉
 *
 * MSN:splashcn@msn.com
 * QQ:36748897
 *
 * 博客:http://www.firstsolver.com/wordpress/
 *
 * 开发环境:
 *      Qt Creator 2.6.0
 *      Qt Library 4.8.3
 *      Ubuntu 12.10
 *
 * 版本历史:
 *      V1.0    2012年11月16日
 *              实现整型与字节数组之间的相互转换
------------------------------------------------------------ */
#ifndef ARRAYUTILS_H
#define ARRAYUTILS_H

#include <QDataStream>

class ArrayUtils
{
public:
    /*
     * 功能:将整型转换为字节数组,默认字节序为小端
     * 参数说明:
     *      value:要转换为字节数组的整型数据
     *      bo:字节序,默认为小端
     * 返回值:
     *      转换后得到的字节数组
     * 异常抛出:无
     */
    static QByteArray Int32ToByteArray(qint32 value, QDataStream::ByteOrder bo = QDataStream::LittleEndian) throw();

    /*
     * 功能:将字节数组转换为整型,默认字节序为小端
     * 参数说明:
     *      ba:要将开头4字节转换为整型的字节数组
     *      bo:字节序,默认为小端
     * 返回值:转换后得到的整型数据
     * 异常抛出:
     *      无
     * 说明:
     *      如果ba长度少于4,返回值均为0
     */
    static qint32 ByteArrayToInt32(const QByteArray & ba, QDataStream::ByteOrder bo = QDataStream::LittleEndian) throw();
};

#endif // ARRAYUTILS_H

ArrayUtils.cpp

#include "ArrayUtils.h"

QByteArray ArrayUtils::Int32ToByteArray(qint32 value, QDataStream::ByteOrder bo) throw()
{
    QByteArray ba;

    QDataStream out(&ba, QIODevice::WriteOnly);
    out.setByteOrder(bo);   // 设置字节序
    out << value;

    return ba;
}

qint32 ArrayUtils::ByteArrayToInt32(const QByteArray & ba, QDataStream::ByteOrder bo) throw()
{
    qint32 value;

    QDataStream in(ba);   // 构建只读数据流
    in.setByteOrder(bo);  // 设置字节序
    in >> value;

    return value;
}

Comments are closed.