2011-12-17 58 views
1

簡單任務:我需要將兩個字符轉換爲兩個數字,將它們相加並將其更改回一個字符。
什麼我有:(在Java中完美的作品 - 其中編碼爲您處理,我猜):Objective-C字符編碼 - 將char更改爲int,然後返回

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輸出正確的值。但是,當我嘗試用算法做相反的處理(即值爲-)時,它就會出錯。奇怪/奇怪的字符會得到錯誤的字符值。

+2

有一件事,你不能只加減UTF-8字符,因爲它們可以多達6個字節長。此外,內部NSStrings使用類似於UCS-2的代碼點來表示它們的字符,並且您將得到一個2字節的UniChar,而不是一個int或一個字符。 – 2011-12-17 08:06:18

+0

`H + H`會讓你在代碼點'U + 90',這不是一個字符。這真的是你想要的嗎? – deceze 2011-12-17 08:13:39

回答

2

的NSString可與單字符的字符是2個字節長(16位)。字符長度爲一個字節,因此您只能將代碼點從U+0000存儲到U+00FF(即基本拉丁文和拉丁語-1補充)。

你應該用數學表達unichar值,然後用+[NSString stringWithCharacters:length:]來創建字符串表示。

但該解決方案仍存在問題。您的代碼可能會在U+D800U+DFFF之間生成無效Unicode字符的代碼點。該標準保留它們以UTF-16編碼碼位從U+10000U+10FFFF,由成對的16位代碼單元編碼。在這種情況下,你的字符串會不合格,既不能以UTF8顯示也不能轉換。

此外,臨時變量tmp2是無用的,您不應該在連接字符串時創建新的newString,而應該使用NSMutableString

1

我假設你的字符串是由代表數字的數字組成的NSString。如果是這樣的話,你可以嘗試以下方法:

包括以下標題:

#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); 
0

不知道這是你的意思,但從我的理解,你想創建一個NSString UTF-8字符串編碼從字符?

如果這就是你想要的,也許你可以在NSString中使用initWithCString:encoding:方法。

相關問題