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

时间:2016-11-29 03:21:29

标签: objective-c

尝试与字符串进行比较: TIFF* img = TIFFOpen("1.tif", "r"); uint32 length; TIFFGetField(img, TIFFTAG_IMAGELENGTH, &length);

但是我得到了

  

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

我也尝试了类似的事情:

BOOL r = [res isEqualToString:[@"\x124Vx\xc3\xaa"]];

现在它可以工作并返回NSString *s = [@"\x12" stringByAppendingString: @"4Vx\xc3\xaa"]; BOOL r = [res isEqualToString:s];

如何指定此类字符串并避免先将其拆分?这有点烦人......

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

YES

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

  

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

使用

NSArray *answers = @[
                     @"",
                     @"#",
                     @"\x12""4Vx\xc3\xaa",
                     ] 

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

1 个答案:

答案 0 :(得分:3)

问题:

BOOL r = [res isEqualToString:@"\x124Vx\xc3\xaa"];

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

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

BOOL r = [res isEqualToString:@"\x12""4Vx\xc3\xaa"];

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

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

NSArray *answers = [NSArray arrayWithObjects:
                     @"",
                     @"#",
                     @"\x12""4Vx\xc3\xaa",
                     nil
                     ];