我需要在字符串中添加一个字符作为crc检查。该字符串由125个字符组成。第125个字符是crc字符。
我循环遍历124个第一个字符,将它们的ascii值加在一起,用总和做一些小东西并计算最后一个字符(第125个字符)的ascii值。
ascii值可以是> 127和< = 255.我必须得到这个值的字符串表示(有时称为扩展的ascii字符)。
我试过这个:
NSString *s1 = [NSString stringWithFormat:@"%C", 155]
但在调试器中打印s1显示@“”。我希望s1是@“ø”。
有些东西告诉我我必须使用UTF8,但我该怎么做?
答案 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