我想在我的應用程序中測試序列化的數據轉換,目前對象存儲在文件中並讀取二進制文件並重新加載對象。如何將二進制數據硬編碼爲字符串
在我的單元測試用例中,我想測試這個操作。由於文件操作代價昂貴,我想在代碼本身中對二進制文件內容進行硬編碼。
我該怎麼做?
目前,我想這樣的,
std::string FileContent = "\00\00\00\00\00.........";
,它是行不通的。
我想在我的應用程序中測試序列化的數據轉換,目前對象存儲在文件中並讀取二進制文件並重新加載對象。如何將二進制數據硬編碼爲字符串
在我的單元測試用例中,我想測試這個操作。由於文件操作代價昂貴,我想在代碼本身中對二進制文件內容進行硬編碼。
我該怎麼做?
目前,我想這樣的,
std::string FileContent = "\00\00\00\00\00.........";
,它是行不通的。
你說得對,一個字符串可以包含'\0'
,但在這裏你仍然在初始化它,從const char*
,根據定義,它在第一個'\0'
停止。我建議你使用uint8_t[]
甚至uint32_t[]
(也就是說,沒有傳遞給std::string
),即使第二個字節可能有高達3字節的開銷(但在源代碼時它更緊湊)。那就是例如通常如何存儲X位圖。
另一種可能性是base64編碼,它是可打印的,但需要(相對較快的)解碼。
如果你真的想把const char[]
到std::string
,先轉換指針const char*
,然後使用std::string
兩個迭代器的構造函數。雖然std::string
確實可以保存'\0'
,但它在字符串中存儲二進制文件有點反模式,因此我沒有給出確切的代碼,只是提示。
下面應該做你所需要的,但可能不推薦,因爲大多數人不會期望std::string
包含空字節。
std::string FileContent { "\x00\x00\x00\x00\x00", 5 };
與'x'前綴一起使用。例如'\ x00 \ x00'等 – alexolut
或八進制類似'「\ 0 \ 0 \ 0」等 –
以上兩者都不會將它變成字符串AFAIK。 – lorro