将字符串从 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&lt;100 &amp;&amp; str[i] != '\n' &amp;&amp; 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 结构)转换为日期作为字符串并填充表

需要帮助将字符串从 c++ 转换为 c# 格式

Swift 将日期字符串转换为日期

使用 Swift 将 JSON 字符串转换为 NSDictionary

swift - 如何将日期从上午/下午转换为 24 小时格式

Swift将十六进制字符串或字符转换为整数