【发布时间】:2017-06-20 14:11:13
【问题描述】:
在 iOS 应用中,我使用的是用 C 编写的第 3 方 SDK。
作为 SDK 方法调用的结果,我收到了一个 unsigned char 数组(参见下面的示例)。
我需要将此数组转换为 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,然后再从 Objective-C 转换回 C?
【问题讨论】:
-
stackoverflow.com/questions/3949628/… ?但是你会忘记
byte[29]有一个\0的事实(如果你想把它转换回来),所以只保存字节数组? -
我看到了其他解决方案,例如 stackoverflow.com/a/6093939/1197572 将
\0替换为\\0。 -
这个
unsigned char数组根本不是一个字符串。您应该将其视为void *并使用 NSData 来存储此类参数。 -
@AndrewTomenko 您可能会遇到一些问题,通过将其存储到 NSData 并将其转换回无符号字符数组,我得到的结果与有希望的初始值相同。我今天无法进一步测试,但我明天会这样做并报告结果。谢谢:-)
-
@AndrewTomenko 让它工作。感谢您的洞察力!
标签: ios objective-c c null-terminated