c++ - 将 const char* 转换为 NSString Objective-C 时获取 null
问题描述
我正在尝试将从我拥有的 C++ 方法中获得的 const char* 转换为 Objective-C 中的方法中的 NSString。这是来自 c++ 的方法:
#define EXPORT __attribute__((visibility("default")))
EXPORT
string getAudioWmark(const char* _filename)
{
string filename = string(_filename);
string result;
result = get_watermark(filename, "");
return (result.c_str());
}
这是调试器视图中返回的结果:
result std::string "pattern 0:00 f59e26b2f4668d02bd33e03a1c0d8892 0.774 0.774 CLIP-A\n\n"
这是来自 Objective-C 的 .h 文件中的方法声明:
extern const char* getAudioWmark(const char* filename);
@interface WatermarkLib : NSObject
- (void)getAudio:(NSString*)filename;
@end
这是该方法的 .mm 实现:
- (void)getAudio:(NSString*)filename {
const char *cString = [filename cStringUsingEncoding:NSASCIIStringEncoding];
NSString* externalString = [NSString stringWithCString:getAudioWmark(cString) encoding:NSUTF8StringEncoding];
NSLog(@"Exito! %@", externalString);
}
“externalString”为空,这就是我要解决的问题。
解决方案
这应该可以帮助你。
const char *cString = filename.UTF8String;
但请确保文件名有内容,否则它必须导致 null