[英]Passing string to function which accepts pointer to char
我使用C語言的OpenSSL庫已經很長時間了,但是現在我需要遷移到C ++。 OpenSSL的文檔像這樣描述MD5功能。
unsigned char *MD5(const unsigned char *d, unsigned long n,
unsigned char *md);
我想將string
類型的變量傳遞給該函數,但它僅接受char *
。 是否可以在C ++中直接將string
傳遞給char *
類型的參數? (我不想對string
類型的變量使用額外的操作)
您可以使用std::string
運動的c_str
成員函數。 例
std::string data;
// load data somehow
unsigned char md[16] = { };
unsigned char *ret = MD5(reinterpret_cast<const unsigned char*>(data.c_str()),
data.size(),
md);
如果要消除丑陋的強制轉換運算符,請定義一個字符串類,該字符串類包含unsigned char
而不是char
並使用它。
typedef std::basic_string<unsigned char> ustring;
ustring data;
unsigned char *ret = MD5(data.c_str(), data.size(), md);
請注意,這可能會在以后使您頭痛。 MD5將無符號的char指針作為參數。 這是一個線索,它實際上不是字符串,而是指向字節的指針。
在您的程序中,如果您開始將字節向量存儲在std :: string中,則最終將使用包含零的字節向量來初始化字符串,這可能會導致難以檢測到該行的錯誤。
將所有字節向量存儲在std::vector<unsigned char>
(或std::vector<uint8_t>
安全,因為這會強制安全初始化。
std::vector<unsigned char> plaintext;
// initialise plaintext here
std::vector<unsigned char> my_hash(16);
MD5(plaintext.data(), plaintext.size(), &my_hash[0]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.