所以我有这个函数,它接收一个指针。
int myfunc( const char *token, unsigned char *plaintext )
我做了一些事情,最后得到一个char数组。
unsigned char my_plaintext[1024];
现在我需要把这个指针(明文)设置成my_plaintext中的内容. 我试过很多不同的方法,但我还没有弄明白这个问题... ...
这一部分在一个cpp文件中,我甚至试过了。
std::string tmpstr( my_plaintext );
但结果是:
token_crypto.cpp:131:13: error: invalid conversion from 'char*' to 'unsigned char*' [-fpermissive]
my_plaintext
^~~~~~~~~~~~
然后...
std::string tmpstr( (char *)my_plaintext );
'�5�B'
这确实是编译,但内容都是错误的。
EDIT:
my_plaintext的内容是好的:
int myfunc( const char *token, unsigned char *plaintext ) {
unsigned char my_plaintext[1024];
... some processing stuff (specifically gcm_decrypt) to which is pass my_plaintext ...
cout << my_plaintext
// prints: hello:world
但是当我尝试将plaintext的内容设置为my_plaintext中的任何内容时 要么编译失败,要么打印一些奇怪的字符.
如果你知道 plaintext
已经指向一个1024长(或更长)的数组,那么你可以使用 memmove()
:
int myfunc( const char *token, unsigned char *plaintext )
{
unsigned char my_plaintext[1024];
/* ... fill in my_plaintext here ... */
memmove(plaintext, my_plaintext, 1024);
/* ... rest of function ... */
}
请注意: memmove
是 destintation,然后是 source,而不是反过来。
这取决于你的函数的调用者,以确保他们传入的指针至少指向1024字节。
你可以使用 memcpy()
而不是在这种情况下,而是使用 memmove()
是一般的好做法。
C++的字符串构造函数并不接受unsigned char *。参见这里的C++参考文献。
http:/www.cplusplus.comreferencestringstringstring
你需要将无符号数组转换为字符数组。请看这里如何做。