我目前有一个链接到两个第三方库的项目.这些库必须由它们自己构建,然后链接到项目.一个是taglib,另一个是zlib.我注意到当你在taglib目录中使用Cmake-gui程序时,你需要指定zlib的构建和安装位置.
我的目标是让CMake为我的程序做类似的事情.由于这些库存储的位置不一致,我如何提示用户提供所需库的路径?
我希望这足够具体.
在zlib 1.2.7,文件inffast.c,第320行,有一个我不明白的声明:
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
Run Code Online (Sandbox Code Playgroud)
变量end和out是两个指针到输出缓冲区.这种说法作出了努力来计算end - out的时候end > out和out - end当out >= end,但我不明白为什么会想这样做.在我看来,最终的结果是相同的,也就是说,这条线也可能已被写入:
strm->avail_out = 257 + (end - out);
Run Code Online (Sandbox Code Playgroud)
两个指针的区别有一个带符号的整数类型ptrdiff_t(C99 6.5.6:9),并且257有类型int.增加发生在这两者之间的更高等级的类型,我不知道三元运营商可能正在防范什么.
我正在编写一个从Web服务器下载tar-gzip文件的iPhone应用程序,然后需要取消归档此文件,以便将其复制到应用程序的Documents文件夹中.
我正在使用tar/gzip,因为我想在一个HTTP请求中下载一大堆小文件,以使一切变得美观和快速.
我已经调查了像http://www.feep.net/libtar/这样的解决方案,但作为C/Objective-C newb,我无法为iPhone平台编译任何这些解决方案.
(我觉得我应该能够对"tar -zxvf myfile.tar.gz"进行系统调用,但看起来并不容易!)
那么有一种简单的方法来解压缩iPhone上的文件吗?或者我认为这一切都错了,有没有更好的方法呢?
提前致谢!
聂
我偶然发现了一个问题,无法找到解决方案.
所以我想做的是使用qUncompress(QByteArray)在qt中解压缩数据,从gzip格式的www发送.我使用wireshark确定这是有效的gzip流,也用zip/rar测试,两者都可以解压缩它.
代码到目前为止,是这样的:
static const char dat[40] = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xaa, 0x2e, 0x2e, 0x49, 0x2c, 0x29,
0x2d, 0xb6, 0x4a, 0x4b, 0xcc, 0x29, 0x4e, 0xad, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00,
0x2a, 0x63, 0x18, 0xc5, 0x0e, 0x00, 0x00, 0x00
};
//this data contains string: {status:false}, in gzip format
QByteArray data;
data.append( dat, sizeof(dat) );
unsigned int size = 14; //expected uncompresed size, reconstruct it BigEndianes
//prepand expected uncompressed size, last …Run Code Online (Sandbox Code Playgroud) 我有这个未压缩的字节数组:
0E 7C BD 03 6E 65 67 6C 65 63 74 00 00 00 00 00 00 00 00 00 42 52 00 00 01 02 01
00 BB 14 8D 37 0A 00 00 01 00 00 00 00 05 E9 05 E9 00 00 00 00 00 00 00 00 00 00
00 00 00 00 01 00 00 00 00 00 81 01 00 00 00 00 00 00 00 00 00 00 00 00 00 …Run Code Online (Sandbox Code Playgroud) 我在python中创建了一个客户端/服务器体系结构,我从客户端获取HTTP请求,通过我的代码请求另一个HTTP服务器.
当我从第三服务器我不能给gzip压缩的数据进行解码的响应,我第一次使用拆分响应数据\r\n作为了我的数据在列表中的最后一个项目分隔符,然后我试着用它解压缩
zlib.decompress(data[-1])
Run Code Online (Sandbox Code Playgroud)
但它给我一个错误的标题错误.我该如何处理这个问题?
码
client_reply = ''
while 1:
chunk = server2.recv(512)
if len(chunk) :
client.send(chunk)
client_reply += chunk
else:
break
client_split = client_reply.split("\r\n")
print client_split[-1].decode('zlib')
Run Code Online (Sandbox Code Playgroud)
我想读取客户端和第二台服务器之间传输的数据.
我正在寻找一个将zlib提炼为:
我看到很多关于zlib库的包装器,比如codeproject.com,但是它们都是特定于平台的,以便提供解压缩到文件/内存缓冲区/管道的附加平台特定功能.
我似乎无法让zlib对windows下的mingw做任何事情.
我下载了zlib @ http://sourceforge.net/projects/mingw/files_beta/MinGW/zlib/zlib-1.2.3-1-mingw32/,并将头文件和lib文件放在正确的位置.
简单的代码如:
#include <stdlib.h>
#include <stdio.h>
#include "zlib.h"
int main(int argc, char *argv[])
{
long a;
char buffer[1024];
a = 1024;
compress(buffer,&a,"testing",7);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
gcc test.c -lzlib -Wall -o test.exe
Run Code Online (Sandbox Code Playgroud)
编译好.然而,exe在压缩功能崩溃.有任何想法吗?
有些网站用zlib描述了OpenSSL的配置和制作,而我可以在没有zlib的情况下完成.
这意味着在某些情况下,openSSL不需要zlib.
有谁告诉我OpenSSL在压缩或解压缩的情况下是什么情况?
@JakeGould的答案很有用.我想知道如何使用-z或不使用-z?
Git给了我一个可爱的圣诞礼物......我正在尝试git push一堆提交,比如6 GB.我收到以下错误消息:
-Counting objects: 525, done.
Delta compression using up to 24 threads.
Compressing objects: 100% (474/474), done.
fatal: pack has bad object at offset 3453162391: inflate returned -5
error: pack-objects died of signal 13
error: failed to push some refs to ....git
Run Code Online (Sandbox Code Playgroud)
这是什么意思,它是如何修复的?从谷歌我可以看出它与我试图推动的大小有关.
这是在写作时发生的.