EXC_BAD_ACCESS奇怪的十六进制到字符串转换

时间:2012-05-10 12:49:02

标签: objective-c macos cocoa

我被困住了。 我给你的是我使用的确切代码,而不是样本:

所以,我做了两个这样的字符串:

DestChoice = [NSString stringWithFormat:@"%lX", [DestField integerValue]];
SourceChoice = [NSString stringWithFormat:@"%lX", [SourceField integerValue]];

因此用户以十进制值写入Source / Dest,但是它们在字符串中以十六进制形式存储,然后我有一个按钮重新格式化源和&像这样:

NSString * CommandReadyToSend  = [NSString stringWithFormat:@"X:0/%@,%@\r", DestChoice, SourceChoice];

我的代码工作正常,但是,一些值在CommandReadyToSend部分产生了EXC_BAD_ACCESS ... 示例:如果我在文本字段中写入1 =>我在DestChoice中收到1(十六进制值) 如果我在文本字段中写入10 =>我在DestChoice中收到A

但如果我在文本字段中写31,我应该得到1F,但我得到一个EXC_BAD_ACCESS ... 同样的事情29(十分值)

似乎某些十六进制值不能重新格式化为字符串,我不明白......

1 个答案:

答案 0 :(得分:2)

似乎对我有用,原因必须在别处。

    NSString *destChoice = [NSString stringWithFormat:@"%lX", 1];
    NSString *sourceChoice = [NSString stringWithFormat:@"%lX", 31];
    NSString *commandReadyToSend  = [NSString stringWithFormat:@"X:0/%@,%@\r", destChoice, sourceChoice];
    NSLog(@"%@", commandReadyToSend);

2012-05-10 13:56:29.092 test[9383:707] X:0/1,1F

-

顺便说一句;如果DestFieldUITextField,那么您应该使用[DestField.text integerValue]; - 这可能是您的问题。