如何将存储在CFArrayRef中的CFStringRef值检索到strings / char *数组

时间:2014-09-25 03:39:29

标签: c++ objective-c c

我是跨平台编程的新手。 我在这里面临一个问题,但由于在线帮助非常有限(或者我可能不知道在哪里搜索),我找不到解决方案。

问题是: 我想将CFArrayRef转换为C ++ / C中的可用格式 我有一个CFArrayRef,它以CFStringRef格式保存语言代码。 我想在一些char *

的std :: vector或C ++数组中检索它

2 个答案:

答案 0 :(得分:8)

假设你有一些CFStringRef的CFArrayRef, 那么你所要做的就是计算向量的元素数量, 迭代CFArrayRef,从中获取字符串并做任何你想做的事情, 在一个实例的示例代码中,我提取CFArrayRef的元素并将它们存储在std :: strings的std :: strings中。

在这里说"姓名"是一个包含一些名称的CFArrayRef:

// Count of available names in ArrayRef
CFIndex nameCount = CFArrayGetCount( names );

std::vector<std::string> vecNames;

//Iterate through the CFArrayRef and fill the vector
for( int i = 0; i < nameCount ; ++i  )
{
    CFStringRef sName = (CFStringRef)CFArrayGetValueAtIndex( names, i );
    strName = CFStringGetCStringPtr( sName , kCFStringEncodingMacRoman );
    vecNames.push_back( strName );
}

答案 1 :(得分:2)

CFString有这个: CFStringGetCString

将字符转换为给定编码后,将字符串的字符内容复制到本地C字符串缓冲区。

Boolean CFStringGetCString (
   CFStringRef theString,
   char *buffer,
   CFIndex bufferSize,
   CFStringEncoding encoding
);

参数: theString

您要访问其内容的字符串。