2011-03-14 75 views
1

我試圖用Python的zlib的輸出輸出到C++字符串。這裏的問題與Python zlib output, how to recover out of mysql utf-8 table?非常相似,不同之處在於我的python腳本生成一個C++頭文件,其中壓縮數據應該以字符串形式存儲。但是,由於特殊字符和原始字節,我無法讓C++將其作爲字符串讀取。之所以我不能將它寫入文件,然後返回到C++程序,是因爲這可能是一個驅動程序組件,因此不允許讀取文件。 這是我正在嘗試的一個小例子。蟒蛇zlib的輸出到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的屏幕截圖。 謝謝

回答

3

你需要escape the non-printable characters在字符串中使用八進制表示法。

例如,

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 

(它勸避免十六進制表示法,因爲這可以是遵循轉義字符可能是合法的十六進制數字,這將破壞東西可變長度和打印字符)

+0

注意'\'仍還可印刷將引起當由C/C++編譯器解析逸出。 – 2011-03-15 15:38:12

+0

@Mark B thx固定 – Will 2011-03-15 16:32:32

+0

非常感謝。該工程 – ssarangi 2011-03-16 14:20:46

2

如果你想二進制數據嵌入到一個C++程序,將Unix的xxd -i命令的幫助?

這將生成包含輸入的二進制文件的char數組表示C頭文件。

+0

即使沒有xxd,在python中生成char數組也很簡單。 – 2011-03-15 03:02:55