我正在使用 gnutls aes加密,这就是我的代码
const gnutls_datum_t * key;
*key = (const char*)"tZOVP7o/u2vQB+4B/0O0ZqLWvydBni8qWnUTFMU5yx4=";
,并且在编译 GCC 时说
error: no match for ‘operator=’ (operand types are ‘const gnutls_datum_t’ and ‘const char*'
然后我来看gnutls文档,并且看到了这样的实现
const gnutls_datum_t key = {
(void *)
"\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe"
"\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d",
20
};
现在我的问题是:
=
和={ }
之间的区别是什么,为什么他在后面的末尾放20,是字符串转换后的大小从 hex 到 bin 吗?
我何时应该使用像(void*)
这样的类型转换,如果没有(void *)
的话,上述键字符串怎么了,会被编译为 const char * ?
答案 0 :(得分:1)
谷歌快速搜索发现this link的内部结构为gnutls_datum_t
:
typedef struct
{
unsigned char *data;
unsigned int size;
} gnutls_datum_t;
如您所见,此结构具有两个字段data
和size
。这就是为什么当他们初始化key
时,他们传递两个变量,中间用逗号分隔。
第一个设置data
的值为:
(void *)
"\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe"
"\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d"
第二个设置size
的值为:
20
关于您的其他问题:
您可以使用列表初始化器here阅读有关C语言中变量初始化的更多信息。有多种不同的情况。