我需要在预处理的 C 代码('gcc -E' 产生的结果)上使用 pycparser。但是,我目前遇到了无法理解或解决的问题。
我正在使用提供的示例 year2.c 和 func_defs.py,我对其进行了修改以使用各种预处理器和假库,但无济于事。也许你们中的一些人可以研究一下,看看你是否可以重现/解决这个问题。我将附加所有必要的代码。
错误是使用 year2.c(常规示例文件)和 year2.i('gcc -E' 输出)生成的。后者没有可用的结果,而前者同时使用预处理器/fakelib 变体。
我创建了一个包含所有相关错误的 bitbucket 存储库、使用的脚本(尽管只是它的最后一个变体)以及 year2.c 和 year2.i 文件。
谢谢你的时间。
我觉得我在这里错过了一些微不足道的东西:
我最近跳到了 Python3(在 Eclipse 中使用 PyDev)。
我有一个计算熵值的项目,并包含以下代码:
data = b'NVGI\x19\x01\x10\x00'
seen = dict(((chr(x), 0) for x in range(0,256)))
for byte in data:
seen[byte]+=1
Run Code Online (Sandbox Code Playgroud)
data 中的二进制字符串要长得多,但这足以用于演示目的。
对于 python3,此代码会导致 KeyError。对于 python2.7,这完全没有问题。
这是因为迭代data返回一个整数(在本例中为 78),而saw需要一个字符“N”。
奇怪的是,在 python2.7 中,相同的代码将产生预期的字符“N”。
我现在已经通过这样做来创可贴:
seen[ord(byte)] += 1
Run Code Online (Sandbox Code Playgroud)
有人可以尝试复制这个或告诉我哪里出了问题吗?