2017-06-20 66 views
1

在iOS应用程序中,我使用了C编写的第三方SDK。 作为SDK方法调用的结果,我收到一个unsigned char数组(参见下面的示例)。将C无符号字符数组与中间字符转换为Objective-C NSString

我需要将此数组转换为Objective-C字符串(NSString)以保存它,并稍后将其转换回C以将其作为参数传递给另一个SDK方法。


我见过多种方式将C字符串转换为Objective-C。

NSString *example1 = [NSString stringWithFormat:@"%s", myArray]; // "8oFDO{c."rägÕªö" 
NSString *example2 = [[NSString alloc] initWithBytes:myArray length:sizeof(myArray) encoding:NSASCIIStringEncoding]; // "8oFDO{c."rägÕªö" 
... 

但是其中没有一个似乎允许\0(空终止字符)在中间(参见[29]在下面的示例)。


实施例无符号字符阵列响应:

{ 
    [0] = '8' 
    [1] = '\b' 
    [2] = '\x01' 
    [3] = 'o' 
    [4] = '\x01' 
    [5] = '\x03' 
    [6] = 'F' 
    [7] = 'D' 
    [8] = 'O' 
    [9] = '\x02' 
    [10] = '\x10' 
    [11] = '\x0e' 
    [12] = '{' 
    [13] = '\x8d' 
    [14] = 'c' 
    [15] = '.' 
    [16] = '\x19' 
    [17] = '"' 
    [18] = 'r' 
    [19] = '\xe4' 
    [20] = 'g' 
    [21] = '\x18' 
    [22] = '\xd5' 
    [23] = '\xaa' 
    [24] = '\xf6' 
    [25] = '\x95' 
    [26] = '\x18' 
    [27] = '\x03' 
    [28] = '\x01' 
    [29] = '\0' 
    [30] = '\x04' 
    [31] = '\x01' 
    [32] = '\x05' 
    [33] = '\x05' 
    [34] = '\x01' 
    [35] = '\x05' 
    [36] = '\x06' 
    [37] = '\x01' 
    [38] = '\x01' 
    ... 
} 

如何可以由C转换为Objective-C和然后返回从目标C至C?

+0

https://stackoverflow.com/questions/3949628/convert-nsdata-to-nsstring-and-ignore-null-bytes?但是你会失去'byte [29]'有'\ 0'这个事实(如果你想把它转换回来),那么只需要保存bytes数组呢? – Larme

+0

我看到其他解决方案,如https://stackoverflow.com/a/6093939/1197572用'\\ 0'替换'\ 0'。 – saeros

+4

这个'unsigned char'数组根本不是一个字符串。您应该像处理void *一样处理它,并使用NSData来存储这些参数。 – toma

回答

1

这个unsigned char数组根本不是一个字符串。您应该像处理它void *一样处理它,并使用NSData来存储这些参数。

相关问题