Преобразование Objective-c в C
Я хотел получить имя графического процессора и нашел код, который делает это с помощью IOKit. Единственная проблема в том, что этот код находится на Objective-C, а мой проект - на C, и я не знаю, как использовать C-строку вместо 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];
}
}
2 ответа
C-подобные строки на самом деле являются указателями на символы или массивом символов, в котором хранится каждый символ. В случае Obj-c NSString - это класс с массивом символов внутри, а те методы, которые используются для изменения вашего строкового значения, являются просто методами, а сам NSString использует строки в стиле C, такие как массив символов. Поэтому, если вы хотите работать со строкой в стиле C, вам нужно использовать массивы символов, совместимые с Obj-C, потому что это просто примитивный тип данных.
Если вам понадобится дополнительная помощь, не стесняйтесь отвечать. С наилучшими пожеланиями.
Решение спасибо Cy-4AH и Робу Напье.
const char *gpu_name = (char *)CFDataGetBytePtr(GPUModel);
return gpu_name;