首页 > 试题广场 >

一个整型数组的每个元素占4字节。编写一个压缩函数pack,把

[问答题]

一个整型数组的每个元素占4字节。编写一个压缩函数pack,把一个无符号小整数(0~255)数组进行压缩存储,只存放低8位;再编写一个解压函数unpack,把压缩数组舒展开来,以整数形式存放。主函数用随机函数生成数据初始化数组,测试pack和unpack函数。

推荐
#include<iostream>
#include <cstdlib>
#include<ctime>
using namespace std;
void pack( int *a, unsigned char *p, int n );
void unpack( unsigned char *p, int *a, int n );
int main()
{
    int *ary, n, i;
    unsigned char *packary;
    cout<<"请输入数组长度:";
    cin>>n;
    ary = new int [n];                //建立动态数组
    packary = new unsigned char[n];        //压缩数组
    srand(int(time(0)));
    for(i=0;i<n;i++)                    //产生随机数并存放到动态数组中
       ary[i]=rand()/255;
    pack( ary, packary, n );
    cout<<"\n输出压缩数组:";
    for( i=0; i<n; i++ )
    {
       if (i %10 == 0)  cout<<endl;        //控制一行输出10个数据
       cout << int( packary[i] ) <<"  ";
    }
    unpack( packary, ary, n);
    cout<<"\n输出解压数组:";
    for( i=0; i<n; i++ )
    {
       if (i %10 == 0)  cout<<endl;  
       cout<<ary[i]<<"  ";
    }
}
void pack( int *a, unsigned char *p, int n )
{
    for(int i=0; i<n; i++)
    {
       p[i] = unsigned char(a[i]);
    }
}
void unpack( unsigned char *p, int *a, int n )
{
    for(int i=0; i<n; i++)
    {
       a[i] = int(p[i]);
    }
}

发表于 2018-05-07 11:43:22 回复(0)