【发布时间】:2017-02-17 16:43:57
【问题描述】:
如何将 'const char *' 转换为 'const unsigned char *'
bool AES(const uint8_t *Data, size_t Size) {
std::string s(reinterpret_cast<const char *>(Data), Size);
AES_cbc_encrypt(s.c_str(), enc_out, Size, &enc_key, iv, AES_ENCRYPT);
}
程序编译时出现的错误
candidate function not viable: no known conversion from 'const char *' to 'const unsigned char *'
for 1st argument
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
我试过这个不行
std::string s(reinterpret_cast<const unsigned char *>(Data), Size);
【问题讨论】:
-
为什么不直接将
Data传递给AES_cbc_encrypt? -
std::string是std::basic_string<char>,所以你可能需要std::basic_string<unsigned char>,但无论如何,你为什么需要临时字符串对象? -
太棒了,这就像购物车@Sneftel
-
@myaut
basic_string<unsigned char>保证存在吗?据我所知,该标准只要求basic_string专门用于char、wchar_t、char16_t和char32_t。我得检查一下。 -
std::vector比std::basic_string有更合适的语义。当然,这种情况下你根本不需要容器类,看@gurka的回答。