首页 > 解决方案 > 将 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”为空,这就是我要解决的问题。

标签: c++iosobjective-cxcode

解决方案


这应该可以帮助你。

const char *cString = filename.UTF8String;

但请确保文件名有内容,否则它必须导致 null


推荐阅读