#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])
для регистрации первого байта и т. Д.)