【问题标题】:Char (hex representation) from NSString来自 NSString 的字符(十六进制表示)
【发布时间】:2013-12-09 03:32:52
【问题描述】:

我在 iOS 中有一个 C 字符数组,如下所示:

static char aStr[MY_STRING_LENGTH] = {0xc0,0xa7,0x82};

当我在控制台 (p aStr) 上检查它时,我得到如下输出:

(char [MY_STRING_LENGTH]) $1 = "\xc0\xa7\x82"

这一切都很好。但是,我需要将该原始字符串放入 plist 中,并将其作为配置数据读入。如果我在 plist 中键入我的条目作为 NSString,我怎样才能得到具有相同值的 C char 数组?到目前为止,我所尝试的一切似乎都将十六进制值转换为其他值。

我尝试过类似的方法:

NSString *newStr = [stringFromPlist UTF8String];

或者将 NSString 分解成一个数组:

NSArray *arr = [stringFromPlist componentsSeparatedByString:@","];

然后迭代和转换:

char newArr[MY_STRING_LENGTH];

for (int i = 0; i < MY_STRING_LENGTH; i++) {
    newArr[i] = [arr[i] UTF8String];
}

但到目前为止,似乎没有什么能满足我的需要。我一直以包含“0x”而不是“\x”的char数组中的值结束。

我的 C 排骨太生锈了,所以我希望有人能指出我的错误。

干杯!

【问题讨论】:

  • 我不完全理解你想要做什么。 stringFromPlist 是什么?您想将aStr 转换为NSString 吗?预期的结果是什么? (请注意,C0 A7 82 不是有效的 UTF-8 序列。)
  • 嗨 Martin,stringFromPlist 是从 plist 读取的 NSString。只是一个持有 NSString 实例的 var。我需要做的是获取 char[] 的 NSString 表示(即 {0xc0,0xa7,0x82})并能够从 NSString (即@“0xc0,0xa7,0x82”)中读取它,从而导致一个看起来像 \xc0\xa7\x82 的 char 数组。像泥一样清澈,对吧? :)

标签: objective-c c character-encoding nsstring character-arrays


【解决方案1】:

我不知道是否有更优雅的解决方案,但你可以尝试:

NSString *stringFromPlist = @"0xc0,0xa7,0x82";
NSArray *arr = [stringFromPlist componentsSeparatedByString:@","];
char newArr[MY_STRING_LENGTH];
for (int i = 0; i < MY_STRING_LENGTH; i++) {
    unsigned result = 0;
    NSScanner *scanner = [NSScanner scannerWithString:arr[i]];
    [scanner scanHexInt:&result];
    newArr[i] = result;
}

【讨论】:

  • 可能有更优雅的解决方案,但我会选择一个现在可以使用的解决方案。干杯,莱因哈德!
  • 很高兴能帮到你!编程愉快!
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2011-08-24
  • 2015-04-06
  • 2011-12-06
  • 2015-11-20
  • 2011-01-30
  • 2016-11-16
相关资源
最近更新 更多