将中间带有空终止字符的 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 来存储此类参数。