【问题标题】:error: hex escape sequence out of range错误:十六进制转义序列超出范围
【发布时间】:2016-11-29 03:21:29
【问题描述】:

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

但是我得到了

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

我也试过类似的东西:

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

现在它可以工作并返回YES

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

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

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

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

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

使用

NSString *s = @"\x12""4Vx\xc3\xaa";
NSArray *arr = @[s];

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

【问题讨论】:

标签: objective-c


【解决方案1】:

问题:

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
                     ];

【讨论】:

  • 谢谢!你的代码完成了这项工作,但它也带有警告:Concatenated NSString literal for an NSArray expression - possibly missing a comma,有没有办法摆脱它?
  • 好的,我找到了原因,我把字符串文字放在一个数组中,所以它给出了这个警告。喜欢@[@"1", @"\x12""4Vx\xc3\xaa"]
  • 我实际上没有注意到字符串周围的[ ]。是的,那需要去。
  • 你知道为什么把它放在数组中会导致警告吗?
  • 不能在数组中。 isEqualToString: 方法需要一个字符串,而不是一个数组。只要去掉多余的方括号就可以了。
猜你喜欢
  • 2022-01-13
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2016-08-15
相关资源
最近更新 更多