备忘:c# 和Qt 交换压缩数据
来源:互联网 发布:mac怎么玩美服lol 编辑:程序博客网 时间:2024/05/09 11:05
项目结构为c#服务器,客户端为qt,通信数据使用zlib压缩,因为qt的qCompress使用的就是zlib压缩,c#服务端使用的是zlib.net,虽然都是一种压缩算法,不过格式上还是有点区别,qt压缩得到的字节数组前四位保存有压缩前字节数组的长度信息,因此在c#端就要做下处理,或者在qt端做下处理再传送,这里选择的是在c#端处理,刚接触qt,还不熟。
qt 直接压缩或解压
c#端的代码如下:
解压:
public static byte[] UnCompress(byte[] bin) { //先去除字节数组的前四位再解压,这是为了配合Qt的压缩 List<byte> bt = new List<byte>(); bt.AddRange(bin); bt.RemoveRange(0, 4); MemoryStream msout = new MemoryStream(); MemoryStream mstem = new MemoryStream(bt.ToArray()); zlib.ZOutputStream outstream = new zlib.ZOutputStream(msout); try { CopyStream(mstem, outstream); } finally { outstream.Close(); mstem.Close(); msout.Close(); } byte[] bout = msout.ToArray(); return bout; }
压缩:
public static byte[] Compress(byte[] bin) { //得到压缩结果后,在字节数组的最前四个字节加上原字节数组的尺寸信息,一个取整一个取余,这是为了配合Qt的解压 int f1 = bin.Length / 256; int f2 = bin.Length % 256; MemoryStream msout = new MemoryStream(); MemoryStream mstem = new MemoryStream(bin); zlib.ZOutputStream outstream = new zlib.ZOutputStream(msout, zlib.zlibConst.Z_DEFAULT_COMPRESSION); try { CopyStream(mstem, outstream); } finally { outstream.Close(); mstem.Close(); msout.Close(); } byte[] bout = msout.ToArray(); List<byte> bt = new List<byte>(); bt.AddRange(bout); bt.Insert(0, 0); bt.Insert(1, 0); bt.Insert(2, (byte)f1); bt.Insert(3, (byte)f2); return bt.ToArray(); }
CopyStream方法是借用zlib.net附带的示例代码。
0 0
- 备忘:c# 和Qt 交换压缩数据
- c# 对话框交换数据
- Qt的Json数据生成--备忘
- Qt实现窗口间数据交换
- Qt 跨UI线程的数据交换和信号-槽调用实现方案汇总
- C#压缩和解压
- qt备忘
- 对话框数据交换和检验
- 对话框数据交换和验证
- 数据交换和多路复用技术
- C#学习笔记(2):多线程数据交换
- c# cs与bs数据请求交换
- C#学习笔记--两个数据的交换
- java和C#的压缩和解压缩
- 使用压缩流压缩和解压数据
- c#实现压缩和解压
- C# 压缩和解压文件
- C#字符串压缩和解压
- 平常心确实是SEO的最佳心态
- 自己动手写CPU之第八阶段(4)——转移指令实现过程2
- 《数据结构》第二章:线性表 思维导图
- 请把百度蜘蛛当情人看待
- 这么就相当于得到双倍的流量
- 备忘:c# 和Qt 交换压缩数据
- 和其它网站交换赞助商广告链接
- 黑马程序员-高新技术-交通灯管理
- 莫大的吸引了赶街网的流量
- hdu 5044
- Interface ServletContext
- git在双xcode中使用可能引起的问题
- linux系统挂载windows分区错误
- “大数据自动挖掘”才是大数据的真正意义