【问题标题】:How to cast a char* to a byte* in c++?如何在 C++ 中将 char* 转换为 byte*?
【发布时间】: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++ 没有类型 byteword32word64
  • @DannyuNDos - 我敢打赌它们只是 typedef,这是标准的一部分。这里真正的问题是byteunsigned char 并且字符串包含char,这是一种不同的类型。编译器还说添加-fpermissive 选项将使其忽略错误。可能是一个临时解决方案。
  • 现已在 Crypto++ wiki 上提供:SecBlock。 wiki 页面包含转换示例。

标签: c++ string encryption byte crypto++


【解决方案1】:
inline string XOR(const string &value, const string &key) {
  string retval(value);
  CryptoPP::xorbuf(&retval[0], &key[0], retval.length());
  return retval;
}

加密++typedefs a byte in confg.h:

typedef unsigned char byte;

你可以使用类似的东西:

CryptoPP::xorbuf(
    reinterpret_cast<byte*>(&retval[0]),
    reinterpret_cast<const byte*>(&key[0]),
    retval.length());

或者,您可以使用 C 风格的强制转换:

CryptoPP::xorbuf((byte*)&retval[0], (const byte*)&key[0], retval.length());

以下是SecByteBlock 的一些类似问题,这是一个字节数组而不是字符数组:

这里有一些关于 C++ 转换的参考:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多