简单任务:我需要将两个字符转换为两个数字,将它们加在一起并将其更改回字符。
我得到了:(在Java中完美 - 我为你处理编码):
int myChar1 = (int)([myText1 characterAtIndex:i]);
int myChar2 = (int)([myText2 characterAtIndex:keyCurrent]);
int newChar = (myChar1 + myChar2);
//NSLog(@"Int's %d, %d, %d", textChar, keyChar, newChar);
char newC = ((char) newChar);
NSString *tmp1 = [NSString stringWithFormat:@"%c", newC];
NSString *tmp2 = [NSString stringWithFormat:@"%@", newString];
newString = [NSString stringWithFormat:@"%@%@", tmp2, tmp1]; //Adding these char's in a string
算法很完美,但现在我无法弄清楚如何实现编码属性。我想用UTF-8做一切,但不知道如何获得char
的UTF-8值。如果我得到它,如何将该值更改回char
代码中的NSLog
输出正确的值。但是当我尝试与算法相反时(即-
值),那么它就出错了。它为奇怪/奇怪的字符获取了错误的字符值。
答案 0 :(得分:2)
NSString适用于2字节长(16位)的unichar字符。字符长度为一个字节,因此您只能存储从U+0000
到U+00FF
的代码点(即Basic Latin和Latin-1 Supplement)。
您应该对unichar值进行数学运算,然后使用+[NSString stringWithCharacters:length:]
创建字符串表示。
但该解决方案仍存在问题。您的代码可能会生成U+D800
和U+DFFF
之间不是有效Unicode字符的代码点。该标准保留它们通过成对的16位代码单元对UTF-16中的U+10000
到U+10FFFF
的代码点进行编码。在这种情况下,您的字符串将是格式错误的,既不能显示也不能以UTF8转换。
此外,临时变量tmp2是无用的,您不应该在连接字符串时创建新的newString,而应使用NSMutableString
。
答案 1 :(得分:1)
我假设你的字符串是由代表数字的数字组成的NSStrings。如果是这种情况,您可以尝试以下方法:
包括以下标题:
#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
然后使用以下代码:
// convert NSString to UTF8 string
const char * utf8String1 = [myText1 UTF8String];
const char * utf8String2 = [myText2 UTF8String];
// convert UTF8 string into long integers
long num1 = strtol(utf8String1, NULL 0);
long num2 = strtol(utf8String2, NULL 0);
// perform calculations
long calc = num1 - num2;
// convert calculated value back into NSString
NSString * calcText = [[NSString alloc] initWithFormat:@"%li" calc];
// convert calculated value back into UTF8 string
char calcUTF8[64];
snprintf(calcUTF8, 64, "%li", calc);
// log results
NSLog(@"calcText: %@", calcText);
NSLog(@"calcUTF8: %s", calcUTF8);
答案 2 :(得分:0)
不确定这是不是你的意思,但根据我的理解,你想用char创建一个带有UTF-8字符串编码的NSString?
如果这是你想要的,也许你可以在NSString中使用initWithCString:encoding:
方法。