错误:十六进制转义序列超出范围

Win*_*ero 3 objective-c

尝试与字符串进行比较: BOOL r = [res isEqualToString:[@"\x124Vx\xc3\xaa"]];

但是我得到了

错误:十六进制转义序列超出范围

我也尝试过类似的东西:

NSString *s = [@"\x12" stringByAppendingString: @"4Vx\xc3\xaa"];
BOOL r = [res isEqualToString:s];
Run Code Online (Sandbox Code Playgroud)

现在它可以工作并返回 YES

如何指定这样的字符串并避免先将它们拆分?有点烦...

更新:我使用@rmaddy 的代码,它现在可以工作,但是,如果我将它放在数组中,例如:

NSArray *answers = @[
                     @"",
                     @"#",
                     @"\x12""4Vx\xc3\xaa",
                     ] 
Run Code Online (Sandbox Code Playgroud)

它将为最后一个字符串文字生成警告:

NSArray 表达式的串联 NSString 文字 - 可能缺少逗号 如何摆脱它?

使用

NSString *s = @"\x12""4Vx\xc3\xaa";
NSArray *arr = @[s];
Run Code Online (Sandbox Code Playgroud)

可以工作,但我不想写更多的 NSString *s ... 来做到这一点。

rma*_*ddy 5

问题在于:

BOOL r = [res isEqualToString:@"\x124Vx\xc3\xaa"];
Run Code Online (Sandbox Code Playgroud)

是与\x124部分。似乎您只能在00-范围内使用十六进制值ff。并注意去除[ ]周围的字符串。

如果您不想4将 视为\x十六进制数的一部分,则可以执行以下操作:

BOOL r = [res isEqualToString:@"\x12""4Vx\xc3\xaa"];
Run Code Online (Sandbox Code Playgroud)

两个双引号字符确保\x转义序列在您需要的地方停止。

要在 中使用此类字符串时消除有关可能缺少逗号的新警告NSArray,您需要使用旧语法来创建数组:

NSArray *answers = [NSArray arrayWithObjects:
                     @"",
                     @"#",
                     @"\x12""4Vx\xc3\xaa",
                     nil
                     ];
Run Code Online (Sandbox Code Playgroud)