python zlib 输出到 c++ 字符串
我正在尝试将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
(建议避免使用十六进制表示法,因为十六进制的长度可能不固定,而且在转义字符后面的可打印字符可能是合法的十六进制数字,这样会导致问题。)