0

我想获取 gpu 名称,并找到了使用 IOKit 执行此操作的代码。唯一的问题是这段代码是在Objective-C中,而我的项目是在C中,我不知道如何使用C-string而不是NSString。

const void *GPUModel = CFDictionaryGetValue(serviceDictionary, CFSTR("model"));

            if (GPUModel != NULL) {
                if (CFGetTypeID(GPUModel) == CFDataGetTypeID()) {
                    //(Original Comment) Create a string from the CFDataRef.
                    //NSString *modelName = [[NSString alloc] initWithData:
                    //                       (NSData *)GPUModel encoding:NSASCIIStringEncoding];

                }
            }

4

2 回答 2

1

类似 C 的字符串实际上是 char 指针,也就是 char 数组,用于存储每个字符。在 Obj-c 的情况下,NSString 是一个内部有一个 char 数组的类,那些用于修改你的字符串值的方法只是方法,而 NSString 本身使用 C 风格的字符串,例如 char 数组。因此,如果您想使用 C 风格的字符串,您必须使用与 Obj-C 兼容的 char 数组,因为它只是一种原始数据类型。

如果您需要进一步的帮助,请随时回复。此致。

于 2021-08-30T14:36:47.810 回答
0

解决方案感谢 Cy-4AH 和 Rob Napier。

const char *gpu_name = (char *)CFDataGetBytePtr(GPUModel);
return gpu_name;
于 2021-08-30T16:14:44.977 回答