В приложении iOS я использую сторонний SDK, написанный на C. В результате вызова метода 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?
byte[29]
имеет\0
(если вы хотите преобразовать его обратно), поэтому просто сохраните массив байтов? - person Larme   schedule 20.06.2017\0
на\\0
. - person yonicsurny   schedule 20.06.2017unsigned char
вообще не является строкой. Вы должны обращаться с ним так, как будто этоvoid *
, и использовать NSData для хранения таких аргументов. - person toma   schedule 20.06.2017