Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Objective-C字符编码-将字符更改为int,然后返回_Iphone_Objective C_Encoding_Utf 8_Character Encoding - Fatal编程技术网

Iphone Objective-C字符编码-将字符更改为int,然后返回

Iphone Objective-C字符编码-将字符更改为int,然后返回,iphone,objective-c,encoding,utf-8,character-encoding,Iphone,Objective C,Encoding,Utf 8,Character Encoding,简单任务:我需要将两个字符转换成两个数字,将它们加在一起,然后将它们改回一个字符。 我所得到的:(在Java中工作得非常完美——我想编码是为您处理的): 算法是完美的,但现在我不知道如何实现编码属性。例如,我想在UTF-8中完成所有工作,但不知道如何获取char的UTF-8值。如果我得到了它,如何将该值改回char 代码中的NSLog输出正确的值。但当我尝试对算法做相反的操作(即-值)时,它就会出错。它为奇怪/奇数字符获取了错误的字符值。我假设您的字符串是由表示数字的数字组成的字符串。如果是这种

简单任务:我需要将两个字符转换成两个数字,将它们加在一起,然后将它们改回一个字符。
我所得到的:(在Java中工作得非常完美——我想编码是为您处理的):

算法是完美的,但现在我不知道如何实现编码属性。例如,我想在UTF-8中完成所有工作,但不知道如何获取
char
的UTF-8值。如果我得到了它,如何将该值改回
char


代码中的
NSLog
输出正确的值。但当我尝试对算法做相反的操作(即
-
值)时,它就会出错。它为奇怪/奇数字符获取了错误的字符值。

我假设您的字符串是由表示数字的数字组成的字符串。如果是这种情况,您可以尝试以下方法:

包括以下标题:

#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>

NSString与长度为2字节(16位)的unichar字符一起工作。字符长度为一个字节,因此只能存储从
U+0000
U+00FF
的代码点(即基本拉丁语和拉丁语-1补充)

您应该对unichar值进行数学运算,然后使用
+[NSString stringWithCharacters:length::
创建字符串表示

但这一解决方案仍然存在一个问题。您的代码可能会在
U+D800
U+DFFF
之间生成非有效Unicode字符的代码点。该标准将其保留为通过成对的16位代码单元对UTF-16中从
U+10000
U+10FFFF
的代码点进行编码。在这种情况下,字符串的格式将不正确,无法在UTF8中显示或转换


另外,临时变量tmp2是无用的,您不应该在连接字符串时创建新的新闻字符串,而应该使用
NSMutableString

不确定这是否是您的意思,但据我所知,您想用字符的UTF-8字符串编码创建NSString


如果这是您想要的,也许您可以使用NSString中的
initWithCString:encoding:
方法。

有一件事,您不能只添加和减去UTF-8字符,因为它们可以长达6个字节。此外,在内部,NSStrings使用类似UCS-2的代码点作为其字符,您将返回一个2字节的UniChar,而不是int或char。
H+H
将使您到达代码点
U+90
,它不是字符。这真的是你想要的吗?@deceze好吧,我只想把它们加在一起,把新值存储在一个字符中(使其可显示),然后再减去它。-基本的encryption@Nideo也许您应该研究二进制XORing或现有的加密形式它们不是数字。它们是任何用户输入的文本。但这两种方法似乎都可行?如果它们不是数字,则strtol()将返回0,但是NSString和const char*之间的转换应该可以正常工作。
#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);