编码Ascii和UTF8的字符

时间:2014-02-07 21:45:50

标签: objective-c utf-8 ascii

我需要在字符串中添加一个字符作为crc检查。该字符串由125个字符组成。第125个字符是crc字符。

我循环遍历124个第一个字符,将它们的ascii值加在一起,用总和做一些小东西并计算最后一个字符(第125个字符)的ascii值。

ascii值可以是> 127和< = 255.我必须得到这个值的字符串表示(有时称为扩展的ascii字符)。

我试过这个:

NSString *s1 = [NSString stringWithFormat:@"%C", 155]

但在调试器中打印s1显示@“”。我希望s1是@“ø”。

有些东西告诉我我必须使用UTF8,但我该怎么做?

4 个答案:

答案 0 :(得分:0)

也许沿着这些方向尝试一些事情

int i = 155;
NSData *data = [NSData dataWithBytes: &i length: sizeof(i)];

NSLog(@"val: %@", [[NSString alloc] initWithData:data
                                        encoding:NSASCIIStringEncoding]);

或NSUTF8StringEncoding

答案 1 :(得分:0)

校验和字节表示此数据实际上不是有效的字符串编码,如果您尝试将其表示为NSString,则可能会遇到其他问题。你应该使用NSData。

答案 2 :(得分:0)

请改用NSString *s1 = [NSString stringWithFormat:@"%c", 155];。 '%c'说明符将为您提供8位字符,而'%C'为您提供16位字符。

答案 3 :(得分:0)

这有效:

  int checksum = 200;
  NSString *str2 = [[NSString alloc] initWithBytes: &checksum 
                                            length: 1 
                                          encoding: NSISOLatin1StringEncoding];
  NSString *str1 = @"abc";
  NSString *str = [str1 stringByAppendingString: str2];


checksum    int 200 200
str2    __NSCFString         *  @"È"    0x00000001001105a0
str1    __NSCFConstantString *  @"abc"  0x0000000100002980
str     __NSCFString         *  @"abcÈ" 0x00000001001109f0

如上所述,'ASCII'编码严格为7位。

如果您使用上述相同但使用'155',则不会显示该字符。但它就在那里:

(lldb) call [str characterAtIndex: 0]
(unsigned short) $0 = 97
(lldb) call [str characterAtIndex: 1]
(unsigned short) $1 = 98
(lldb) call [str characterAtIndex: 2]
(unsigned short) $2 = 99
(lldb) call [str characterAtIndex: 3]
(unsigned short) $3 = 155