2017-02-25 75 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