gpt4 book ai didi

c - C语言: '= { }' operators vs normal normal equal '=' operator

转载 作者:行者123 更新时间:2023-11-30 19:03:18 30 4
gpt4 key购买 nike

我正在使用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*

最佳答案

快速谷歌搜索发现this linkgnutls_datum_t的内部结构:

 typedef struct
{
unsigned char *data;
unsigned int size;
} gnutls_datum_t;

如您所见,该结构有两个字段:datasize。这就是为什么当它们初始化 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
<小时/>

关于您的其他问题:

您可以阅读有关使用列表初始化器在 C 中初始化变量的更多信息 here 。有多种不同的场景。

关于c - C语言: '= { }' operators vs normal normal equal '=' operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170773/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com