阵列转为无符号字符*。

问题描述 投票:0回答:1

所以我有这个函数,它接收一个指针。

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中的任何内容时 要么编译失败,要么打印一些奇怪的字符.

c++ pointers
1个回答
0
投票

如果你知道 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() 是一般的好做法。


-1
投票

C++的字符串构造函数并不接受unsigned char *。参见这里的C++参考文献。

http:/www.cplusplus.comreferencestringstringstring

你需要将无符号数组转换为字符数组。请看这里如何做。

如何在C++中把unsigned char*转换为std::string?

© www.soinside.com 2019 - 2024. All rights reserved.