2016-07-22 67 views
2

我想在我的應用程序中測試序列化的數據轉換,目前對象存儲在文件中並讀取二進制文件並重新加載對象。如何將二進制數據硬編碼爲字符串

在我的單元測試用例中,我想測試這個操作。由於文件操作代價昂貴,我想在代碼本身中對二進制文件內容進行硬編碼。

我該怎麼做?

目前,我想這樣的,

std::string FileContent = "\00\00\00\00\00........."; 

,它是行不通的。

+0

與'x'前綴一起使用。例如'\ x00 \ x00'等 – alexolut

+0

或八進制類似'「\ 0 \ 0 \ 0」等 –

+0

以上兩者都不會將它變成字符串AFAIK。 – lorro

回答

2

你說得對,一個字符串可以包含'\0',但在這裏你仍然在初始化它,從const char*,根據定義,它在第一個'\0'停止。我建議你使用uint8_t[]甚至uint32_t[](也就是說,沒有傳遞給std::string),即使第二個字節可能有高達3字節的開銷(但在源代碼時它更緊湊)。那就是例如通常如何存儲X位圖。

另一種可能性是base64編碼,它是可打印的,但需要(相對較快的)解碼。

如果你真的const char[]std::string,先轉換指針const char*,然後使用std::string兩個迭代器的構造函數。雖然std::string確實可以保存'\0',但它在字符串中存儲二進制文件有點反模式,因此我沒有給出確切的代碼,只是提示。

2

下面應該做你所需要的,但可能不推薦,因爲大多數人不會期望std::string包含空字節。

std::string FileContent { "\x00\x00\x00\x00\x00", 5 }; 
相關問題