最近在做一个项目,是关于文件传输的,传输文件内容之前先传文件大小过去。服务端在读取数据时,先读取8个字节的数据作为文件大小,方便传输的过程中显示进度条。服务端用的是Java。客户端用的是C++,windows平台的。那么问题来了,send函数只接受char*类型的数据,在传文件之前怎么先传输Java long长度一致的数据过去呢,首先考虑到就是将long long类型转换成char数组。再将char数组传过去。想了一下位操作,结果可以实现了。代码如下:
/*
*java的long占8个字节,和64位操作系统的long long 一致
*该函数通过位操作将long long转换成char数组
*/
char* long2charArr(long long num)
{
char* arr=new char[8];
int wei=56;
for(int i=7;i>=0;i--)
{
long long temp=num<<wei;//左移到56-64位,将比它高的位丢失
arr[i]=temp>>56;//右移到1-8位,将比它低的位丢失
wei-=8;
}
return arr;
}
通过new申请内存,不用的时候记得delete掉。