我有一个Objective-C视图控制器类,我试图从中调用直接C(非Objective-C)函数。我想通过引用传入一个字符串变量,在C函数中设置它的值,然后在我的视图控制器中我想将它转换为普通的NSString对象。
由于我无法直接传入NSString对象,我需要创建并传入char
指针或char
数组,然后在函数之后将其转换为NSString对象回报。
有人能指出一个简单的代码示例,说明如何执行此操作吗?我在Objective-C或常规C中都不强,所以操纵字符串对我来说非常困难。
答案 0 :(得分:6)
也许是这样的
bool doSomethingToMyString(const char* originalString, char *buffer, unsigned int size)
{
bool result = 0;
if (size >= size_needed)
{
sprintf(buffer, "The new content for the string, maybe dependent on the originalString.");
result = 1;
}
return result;
}
...
- (void) objectiveCFunctionOrSomething:(NSString *)originalString
{
char myString[SIZE];
if (doSomethingToMyString([originalString UTF8String], myString, SIZE))
{
NSString *myNSString = [NSString stringWithCString:myString encoding:NSUTF8StringEncoding];
// alright!
}
}
或者,你知道,那是什么意思。
答案 1 :(得分:1)
在NSString
文档中查看以下内容:
– cStringUsingEncoding:
– getCString:maxLength:encoding:
– UTF8String
+ stringWithCString:encoding:
答案 2 :(得分:0)
嗯,我得到了它的工作。这是我的C函数:
int testPassingChar(char buffer[]) {
strcpy(buffer, "ABCDEFGHIJ");
return 0;
}
然后从Objective-C:
char test[10];
int i;
i = testPassingChar(test);
NSString* str = [[NSString alloc] initWithBytes:test length:sizeof(test)
encoding:NSASCIIStringEncoding];
答案 3 :(得分:0)
为什么不在Objective-C中包装C函数?
-(NSString*)testPassingCharWithStringLength:(int)whateverLength {
char *test = malloc(sizeof(char) * whateverLength);
//do whatever you need to *test here in C
NSString *returnString = [NSString stringWithUTF8String:test];
free(test);
return returnString;
}
...例如......