将C无符号字符数组与中间字符转换为Objective-C NSString
问题描述:
在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?
答
这个unsigned char
数组根本不是一个字符串。您应该像处理它void *
一样处理它,并使用NSData
来存储这些参数。
https://stackoverflow.com/questions/3949628/convert-nsdata-to-nsstring-and-ignore-null-bytes?但是你会失去'byte [29]'有'\ 0'这个事实(如果你想把它转换回来),那么只需要保存bytes数组呢? – Larme
我看到其他解决方案,如https://stackoverflow.com/a/6093939/1197572用'\\ 0'替换'\ 0'。 – saeros
这个'unsigned char'数组根本不是一个字符串。您应该像处理void *一样处理它,并使用NSData来存储这些参数。 – toma