将中间带有空终止字符的 C unsigned char 数组转换为 Objective-C NSString
Converting C unsigned char array with null-terminating char in middle to Objective-C NSString
在 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Õªö"
...
但是其中 none 似乎允许在中间使用 [=14=]
(空终止字符)(参见下面示例中的 [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] = '[=12=]'
[30] = '\x04'
[31] = '\x01'
[32] = '\x05'
[33] = '\x05'
[34] = '\x01'
[35] = '\x05'
[36] = '\x06'
[37] = '\x01'
[38] = '\x01'
...
}
如何从 C 转换为 Objective-C,然后从 Objective-C 转换回 C?
这个 unsigned char
数组根本不是一个字符串。您应该将其视为 void *
并使用 NSData
来存储此类参数。
在 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Õªö"
...
但是其中 none 似乎允许在中间使用 [=14=]
(空终止字符)(参见下面示例中的 [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] = '[=12=]'
[30] = '\x04'
[31] = '\x01'
[32] = '\x05'
[33] = '\x05'
[34] = '\x01'
[35] = '\x05'
[36] = '\x06'
[37] = '\x01'
[38] = '\x01'
...
}
如何从 C 转换为 Objective-C,然后从 Objective-C 转换回 C?
这个 unsigned char
数组根本不是一个字符串。您应该将其视为 void *
并使用 NSData
来存储此类参数。