我对C/C++颇为陌生,我试图使用定义数据结构PDS并提供访问数据方法的C库。C++将void *转换为int错误
这里是我用来访问它的功能:
pdsGetNext (PDS *pds,char **pKey,PDStype *pT,size_t *pS,void **pD);
它基本上返回元素的关键,元素的类型,元素和元素的实际数据的大小。 void **pD
在文档中描述如下:“指向地址的指针,它获取实际元素。”。
我试图将数据转换为适当的类型,如“PDStype”所示。我有铸造的数据整数的问题,这里的示例代码:
char *key = NULL;
PDS_TYPE type;
size_t size;
void *data = NULL;
float f;
pdsRewind(myPDS);
while (pdsGetNext(myPDS, &key, &type, &size, &data) == PDS_ERR_NONE) {
switch (type) {
case PDS_TYPE::PDS_I:
// this is integer
printf("INT: %d\n", *((int*)data));
printf("INT PRINTED AS STRING: %s\n", (int*)data);
printf("INT AS STRING: %s\n", (char*)data);
break;
case PDS_TYPE::PDS_PCH:
//this is null terminated string
printf("STRING: %s\n", (char*)data);
break;
default:
break;
}
}
的整数的真正价值是7,输出如下:
INT: 55
INT PRINTED AS STRING: 7
INT AS STRING: 7
它对我来说似乎是第一个,我想成为“7”,是什么打印出来,如果我打了空指针void *ptr = (char*)malloc(sizeof(o))
,然后试图把它像int一样投给它像*((int*)ptr)
我的问题是:有东西将它转换为int时,我在这里做错了吗?据我所知,数据返回原因为void*
是为了让一个人能够以这种方式使用转换。
55之外几乎可以肯定地址为“7”在ASCII表的代码。也许你想用atoi代替? – AlexTheo
为什么要输入'(char *)'如果输入'void *'? – Shreevardhan
我铸造(字符*),因为最终我将使用代码在C++ CLI做出的PowerShell模块,并用'系统::对象:: String'使用它。其他类型将以相似的方式使用。 – user3141710