簡體   English   中英

將字符串傳遞給接受char指針的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM