2017-02-25 38 views
-3

我在C++中非常新,并且想将char*std::string转换为byte*如何在C++中将char *转换为字节*

这是我的代码:

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) 
+0

一个char是不是在C++ – user

+0

字符串,好像你正在使用非标准C++,或者你复制了一个Java代码。 C++没有“byte”,“word32”或“word64”类型。 –

+1

@DannyuNDos - 我敢打赌,他们只是typedef,这是标准的一部分。这里真正的问题是'byte'是'unsigned char',而字符串包含'char',这是一种不同的类型。编译器还说,添加'-fpermissive'选项将使其忽略错误。可能是一个临时解决方案。 –

回答

0

加密++ :

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++铸造一些参考:

+0

感谢您的帮助... –

+0

@ T.Rifle - 也许您应该结帐[某些搜索结果](https://www.google.com/search?q=c%2B%2B+for+beginners)帮助未来的问题。堆栈溢出不是那些新手语言最简单的论坛。它是Stack Overflow的一个众所周知的问题。另请参阅[我们可以请新用户好一点吗?](http://meta.stackexchange.com/questions/9953/could-we-please-be-a-bit-nicer-to-new-users) 。 – jww