来自NSString的Char(十六进制表示)

时间:2013-12-09 03:32:53

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

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

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

但到目前为止似乎没有做我需要的事情。我一直在char数组中包含“0x”而不是“\ x”的值。

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

干杯!

1 个答案:

答案 0 :(得分: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;
}