Преобразуйте символ без знака* в NSData и наоборот в Objective-C

#ios #objective-c #nsdata #unsigned

Вопрос:

Просто хочу преобразовать NSData в байт и байт в NSData с помощью objective-c

 unsigned char* dataToByteArray = (unsigned char*) [data bytes];  NSLog(@"Bytes is %@", dataToByteArray);    NSData *datas = [NSData dataWithBytes:amp;dataToByteArray length:sizeof(dataToByteArray)];  NSLog(@"Data is like%@", datas);  NSLog(@"After convert bytes is %@", dataToByteArray)  

Ответ №1:

Две вещи:

Передайте буфер, а не указатель на буфер, а длина относится к количеству элементов в буфере, а не к размеру указателя буфера:

 [NSData dataWithBytes:dataToByteArray length:[data length]]  

sizeof(dataToByteArray) становится размером указателя — 8 байт. Инициализатор хочет знать, сколько элементов находится в буфере.

Кроме того, %@ используется только для регистрации объектов Objective-C. unsigned char * является буфером C, а не объектом Objective-C. (Вы не можете напрямую регистрировать буфер C с помощью одного «%что-то», так как только указатель не содержит достаточной информации, например, о том, сколько элементов и когда следует прекратить ведение журнала. С таким же успехом это может быть указатель на один unsigned char . Но вы могли бы использовать %p для регистрации указателя, NSLog(@"first byte: %c", dataToByteArray[0]) для регистрации первого байта и т. Д.)