【问题标题】:how to convert 'const char *' to 'const unsigned char *'如何将 'const char *' 转换为 'const unsigned char *'
【发布时间】: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::stringstd::basic_string&lt;char&gt;,所以你可能需要std::basic_string&lt;unsigned char&gt;,但无论如何,你为什么需要临时字符串对象?
  • 太棒了,这就像购物车@Sneftel
  • @myaut basic_string&lt;unsigned char&gt; 保证存在吗?据我所知,该标准只要求 basic_string 专门用于 charwchar_tchar16_tchar32_t。我得检查一下。
  • std::vectorstd::basic_string 有更合适的语义。当然,这种情况下你根本不需要容器类,看@gurka的回答。

标签: c++ aes


【解决方案1】:

uint8_tif it's available 只是 unsigned char 的类型定义。因此,您可以这样做:

 bool AES(const uint8_t *Data, size_t Size) {  
     AES_cbc_encrypt(Data, enc_out, Size, &enc_key, iv, AES_ENCRYPT);
 }

请注意,您可能也应该在函数中返回一些内容。

【讨论】:

  • OP 必须返回一些东西,否则它是未定义的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多