将字符串从 C++ 转换为 Swift
Posted
技术标签:
【中文标题】将字符串从 C++ 转换为 Swift【英文标题】:Converting string from C++ to Swift 【发布时间】:2022-01-11 01:28:14 【问题描述】:我正在尝试在 Swift 中使用 C++ 函数。为此,我使用了一个 Objective-C 包装器。我对Objective-C和C++不是很熟悉。
我的 wrapper 函数将 Swift 字符串作为来自 textField 的参数。在 C++ 内部,我加密传递的字符串并返回它。
这是我的 C++ 函数:
string StringModifier::encryptString(string str)
int i;
for(i=0; (i<100 && str[i] != '\n'); i++)
str[i] = str[i] + 2;
return str;
在包装器内部:
StringModifier stringModifier;
-(NSString*)encryptString:(NSString*)str;
string strng = [str UTF8String];
string finalString = stringModifier.encryptString(strng);
NSString *result = [NSString stringWithCString: finalString.c_str() encoding:[NSString defaultCStringEncoding]];
return result;
encryptString("Helloworld") 的输出是 "Jgnnqyqtnf¬√√0*?" 多次调用此方法后,会抛出 EXC_BAD_ACCESS 错误。
我该如何解决这个问题?
【问题讨论】:
你能在for循环条件下试试i<100 && str[i] != '\n' && str[i] != '\0'
吗?
这实际上解决了我的问题。从没想过这是Cpp方面的问题。非常感谢。
为它添加了答案:)
【参考方案1】:
您需要在 C++ 中检查空字符 (\0
)。
将你的 for 循环更改为:
for(i=0; (i<100 && str[i] != '\n' && str[i] != '\0'); i++)
str[i] = str[i] + 2;
更好的是,根据字符串的大小循环:
string StringModifier::encryptString(string str)
for (int i = 0; i < str.size() && str[i] != '\n'; i++)
str[i] = str[i] + 2;
return str;
【讨论】:
以上是关于将字符串从 C++ 转换为 Swift的主要内容,如果未能解决你的问题,请参考以下文章
将 UNIX 时间从 json 导入(swift 结构)转换为日期作为字符串并填充表
使用 Swift 将 JSON 字符串转换为 NSDictionary