python zlib 输出到 c++ 字符串

1 投票
2 回答
610 浏览
提问于 2025-04-16 13:41

我正在尝试将Python的zlib输出写入一个C++字符串。这个问题和Python zlib输出,如何从MySQL的UTF-8表中恢复?的内容很相似,不过我的Python脚本生成的是一个C++头文件,里面应该存储压缩的数据作为字符串。但是,由于有特殊字符和原始字节,我无法让C++把它当作字符串来读取。我不能先把它写入文件再在C++程序中读取,因为这可能是一个驱动组件,所以不允许读取文件。
这是我正在尝试的一个小例子。


compressed_string = zlib.compress("This is a huge string. Around 263KB")
fptr = open('my_header.h', 'w')

content = "#ifndef __HEADER_DEFS__\n\
#define __HEADER_DEFS__\n\
\n\
#include  \n\
\n\
std::string binary_compressed = \"%s\" \n\
\n\
#endif" % compressed_string

fptr.write(content)
fptr.close()

不过,我正在压缩的字符串是一个很大的数据,不像我这里给出的例子,所以我添加了一个截图,展示我在实际例子中得到的字符类型。

请查看http://tinypic.com/r/1078lxw/7的截图。谢谢。

2 个回答

2

如果你想把二进制数据嵌入到一个C++程序里,Unix系统的 xxd -i 命令能帮上忙吗?

这个命令会生成一个C语言的头文件,里面包含了一个 char 数组,表示你输入的二进制文件。

3

你需要使用八进制表示法来处理字符串中的不可打印字符。

比如,

import string
....
safe_string = ""
for ch in compressed_string:
   if ch in string.printable and ch != '\\':
      safe_string += ch
   else:
      safe_string += "\%o" % ord(ch)
content = ".....\"%s\" ...." % safe_string

(建议避免使用十六进制表示法,因为十六进制的长度可能不固定,而且在转义字符后面的可打印字符可能是合法的十六进制数字,这样会导致问题。)

撰写回答