小编Sam*_*ell的帖子

是否有比DotNetZip或LZMA更好的字符串压缩库?

我有一个超过800个字符的数据字符串,我正在尝试压缩以用于QR码(我想要至少50%,但如果我把它减少到不到七百,可能会很高兴) .这是我正在尝试压缩的示例字符串,包含841个字符:

+hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA
97mDyclKSttIZXOxSPBf85LEN4PUUqj65aio5qwZttZSZ64wpnMFg/7Alt1R39IJvTmeYfBm
Tuc1noMMcknlydFocwI8/sk2Sje5MR/nYNX0LPkQhzyi5vFJdrndqAgXYULsYrB3TJDAwvgs
Kw9C5EJnrlqcb21zg17O2gU/C8KY0pz9RPzUl1Sb0rCP8iZCeis4YbQ5tuUppOfnO/X0Mosv
SOQJ/bF9juKW8ocnQvNjsNxGV1gPkWWtiU2Old7Qm7FLDqL6kQKrq356yifs0NiMVGdvAg32
eugewuttCugoZASYOpQdwPu1jMxVO1fzF3zEy5w6tDlcfA2DZwa+un9/k8XZWAO/KVExy68q
UtVRQxsIOKgpl/2tNw5DBAKbykKIkmizbsA2xtzqnYqld4kOdNMJh3YjlqWF9Bt8MZo7a+Q6
jgayr2rjpyIptc599DGtvp68ZNQ64TKNmiMnnyGMo3E+xW34G3RrsYnHGm+xJoLKoOJhacDu
oZke1ycJgQv+Y61WPrvtFOVBxV5rvSzO0+8px5AWN3uCrrw1RmT5N14IVhh6BOtRjsifqIB2
dAKxzBNsvbXm1SzkuyqYiMnp5ivy3m2mPwc9GLsykx0FRIkhCYO8ins9E5ot9QvVnE155MFA
8FVwsP5uNdOF4EzQS2/h2QK3zb5Yq4Nftlo605Dd5vuVN/A7CUN38DaAKBxDKgqDzydfQnZw
R0hTfMHNLgBJKNDSpz2P6almGlUJtXT6IYmzuU2Iaion8ePG
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下三个库:

  1. 内置的.NET GzipStream
  2. DotNetZip,包括,
    • GzipStream
    • DeflateStream
  3. 7-zip的LZMA SDK

我遇到了压缩实际上使字符串更长的问题.我的理解是DeflateStream的开销最小,但它仍在添加字符.使用DotNetZip,我告诉它使用最大压缩:

Imports Ionic.Zlib

Shared Function CompressData(data As Byte()) As Array

    Dim msCompressed As MemoryStream = New MemoryStream

    ' I'm not sure if the last parameter on this next function should be
    ' true (for LeaveOpen), but it doesn't seem to affect it either way.
    Dim deflated As DeflateStream = New DeflateStream(msCompressed, _
        CompressionMode.Compress, CompressionLevel.BestCompression, True)

    ' …
Run Code Online (Sandbox Code Playgroud)

vb.net compression

5
推荐指数
1
解决办法
3262
查看次数

使用pygame读取控制台输入

无论如何,是否有必要使用pygame从控制台获取输入,而不必显示单独的窗口以获取输入?我正在使用pygame跟踪键盘上的按键被按下了多长时间。

以下代码不起作用(这只是一个最小的示例,它实际上并不跟踪经过的时间):

pygame.init()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            print event.key, 'pressed'
Run Code Online (Sandbox Code Playgroud)

看起来没有任何pygame事件被引发。如果我加

screen = pygame.display.set_mode((640, 480))
Run Code Online (Sandbox Code Playgroud)

pygame.init()

然后引发了该事件,但是我有一个我不想处理的可怕的窗口。

为了解释为什么我不想要该窗口,我设想此应用程序是一个命令行实用程序,所以我不能拥有它。是否有任何功能上的原因阻止pygame在命令行上运行?

谢谢!

编辑:我推测问题是pygame.init(),并且我只需要初始化键和事件模块。根据http://www.pygame.org/docs/tut/ImportInit.html,我应该可以打电话

pygame.key.init()
pygame.event.init()
但这没用。

python pygame

5
推荐指数
1
解决办法
3791
查看次数

将格式字符串通过过程传递给fprintf

我正在开发一个生成FDF文件的程序,用于填写Adobe PDF表单.目前,我有各种被调用的过程,因为在每个过程终止之前,它会打开FDF文件,写入其特定数据并关闭文件.

我正在尝试将用于将数据写入FDF文件的代码放在单独的过程中,然后让其他过程调用它.这将允许按任务更大程度地分离代码,如果我将来必须更改它,我可以轻松地完成.

我遇到了一些问题,因为我需要将不同数量的变量传递给fprintf.也就是说,我曾经有这样一条线:

fprintf(fp,"<</T(f1_44(0))/V(%d)>>\n",wages);
Run Code Online (Sandbox Code Playgroud)

我编写了以下函数,但我无法使其工作:

void writeToFDF(FILE *fp, char *filename, char *data, char *arg)
{
/* independent method for writing to FDF file */

/* open file */
fp=fopen(filename,"a");

fprintf(fp,data,arg);

/* close file */
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

所以在理论上,我会在父函数调用中:

writeToFDF(fp,"1040.fdf","<</T(f1_44(0))/V(%d)>>\n",wages);
Run Code Online (Sandbox Code Playgroud)

我现在遇到错误,我相信它与函数参数的最后部分有关.另外,如果我有多个参数,我怎么能让它工作?

谢谢.

c

2
推荐指数
2
解决办法
3004
查看次数

将指针传递给函数并进行更改

我正在编写一个编程任务,并且在使用指针时遇到了一些麻烦.下面的代码示例不是来自我的作业,而是说明了我遇到的问题.我正在尝试将指针传递给另一个函数(从更改到真正)并让该函数创建一个新对象然后返回它.但是,我发现原始对象并没有真正改变.我无法弄清楚为什么不这样做,因为我正在使用malloc在堆上分配它,因此该对象应该在创建它的函数之外继续存在.

在下面的代码示例中,我正在寻找输出:

a = 3
a = 5
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了

a = 3
a = 3
Run Code Online (Sandbox Code Playgroud)

即使是正确方向的一些指针也会有用!谢谢!

山姆

笔记

  • 如果可能的话,我想保持函数原型相同.

示例代码

#include <stdio.h>
#include <stdlib.h>

void really(int *a) {
    /* Allocate pointer to new int, set it to 5, and
    then set the pointer passed in equal to the new pointer */
    int *b = malloc(sizeof(int));
    *b = 5;

    a = b;
}

void change(int *a) {
    /* We don't actually change the object in this function;
    we are instead passing …
Run Code Online (Sandbox Code Playgroud)

c pointers

1
推荐指数
1
解决办法
355
查看次数

标签 统计

c ×2

compression ×1

pointers ×1

pygame ×1

python ×1

vb.net ×1