将字符串从 C++ 转换为 Swift
Converting string from C++ to Swift
我正在尝试在 Swift 中使用 C++ 函数。为此,我使用了 Objective-C 包装器。我对Objective-C和C++不是很熟悉
我的 wrapper 函数将 Swift 字符串作为来自 textField 的参数。在 C++ 内部,我加密传递的字符串并 return 它。
这是我的 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 错误。
我该如何解决这个问题?
您需要检查 C++ 中的空字符 ([=12=]
)。
将您的 for 循环更改为:
for(i=0; (i<100 && str[i] != '\n' && str[i] != '[=10=]'); 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;
}
我正在尝试在 Swift 中使用 C++ 函数。为此,我使用了 Objective-C 包装器。我对Objective-C和C++不是很熟悉
我的 wrapper 函数将 Swift 字符串作为来自 textField 的参数。在 C++ 内部,我加密传递的字符串并 return 它。
这是我的 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 错误。
我该如何解决这个问题?
您需要检查 C++ 中的空字符 ([=12=]
)。
将您的 for 循环更改为:
for(i=0; (i<100 && str[i] != '\n' && str[i] != '[=10=]'); 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;
}