为什么这个字符串返回NULL? (二进制转换)

时间:2014-08-03 01:05:54

标签: objective-c binary nsmutablestring

我试图将8位二进制字符串的最后四位数字分开。为了做到这一点,我试图创建一个新的字符串和appendFormat原始字符串的最后四位数字。唯一的问题是这个新字符串总是返回NULL,当我知道它不应该是。任何人都知道我做错了什么?

NSMutableString *str = @"01110001;

unsigned short zero = [str characterAtIndex:0]-48;
unsigned short one = [str characterAtIndex:1]-48;
unsigned short two = [str characterAtIndex:2]-48;
unsigned short three = [str characterAtIndex:3]-48;
unsigned short four = [str characterAtIndex:4]-48;
unsigned short five = [str characterAtIndex:5]-48;
unsigned short six = [str characterAtIndex:6]-48;
unsigned short seven = [str characterAtIndex:7]-48;

NSMutableString *newString;
[newString appendFormat:@"%d%d%d%d",four, five, six, seven];
NSLog(@"NEWSTRING:%@", newString);

或者,有没有更好的方法来获得原始字符串的最后四位数?

1 个答案:

答案 0 :(得分:2)

使用NSString

的方法
NSString *str = @"01110001";
NSString *lastFour = [str substringFromIndex:str.length - 4];

此代码假定str至少包含4个字符。无论字符串有多长,它都会给你最后四个。

更新以解释原始问题。

由于您从未初始化newString,因此您获得了nil。它是nil,您在appendFormat:值上调用nil,该值无效。

如果你这样做会有用:

NSMutableString *newString = [NSMutableString string];

但是,你的字符串都不需要是可变的。

你应该做的:

NSString *newString = [NSString stringWithFormat:@"%d%d%d%d",four, five, six, seven];

当然,正如我的答案的开头所示,无论如何都不需要这样做。