【发布时间】:2017-02-25 12:09:03
【问题描述】:
我是 C++ 新手,想将 char* 从 std::string 转换为 byte*。
这是我的代码:
inline string XOR(const string &value, const string &key) {
string retval(value);
CryptoPP::xorbuf(&retval[0], &key[0], retval.length());
return retval;
}
在g++,输出为:
AESXCBC128.cpp: In function ‘std::string CryptoPP::XOR(const string&, const string&)’:
AESXCBC128.cpp:79:48: error: invalid conversion from ‘char*’ to ‘byte* {aka unsigned char*}’ [-fpermissive]
xorbuf(&retval[0], &key[0], retval.length());
^
AESXCBC128.cpp:45:6: error: initializing argument 1 of ‘void CryptoPP::xorbuf(byte*, const byte*, size_t)’ [-fpermissive]
void xorbuf(byte *buf, const byte *mask, size_t count)
^
AESXCBC128.cpp:79:48: error: invalid conversion from ‘const char*’ to ‘const byte* {aka const unsigned char*}’ [-fpermissive]
xorbuf(&retval[0], &key[0], retval.length());
^
AESXCBC128.cpp:45:6: error: initializing argument 2 of ‘void CryptoPP::xorbuf(byte*, const byte*, size_t)’ [-fpermissive]
void xorbuf(byte *buf, const byte *mask, size_t count)
【问题讨论】:
-
a char 不是 c++ 中的字符串
-
您似乎在使用非标准 C++,或者您复制了 Java 代码。 C++ 没有类型
byte、word32或word64。 -
@DannyuNDos - 我敢打赌它们只是 typedef,这是标准的一部分。这里真正的问题是
byte是unsigned char并且字符串包含char,这是一种不同的类型。编译器还说添加-fpermissive选项将使其忽略错误。可能是一个临时解决方案。 -
现已在 Crypto++ wiki 上提供:
SecBlock。 wiki 页面包含转换示例。
标签: c++ string encryption byte crypto++