2009-04-04 15 views
11

Jak dołączyć NSInteger do NSMutableData. Coś w tym stylu ...Dołącz NSInteger do NSMutableData

NSMutableData *myData = [[NSMutableData alloc] init]; 
NSInteger myInteger = 42; 

[myData appendBytes:myInteger length:sizeof(myInteger)]; 

Tak więc 0x0000002A zostanie dołączony do myData.

Każda pomoc doceniona.

Odpowiedz

22

Podaj adres liczby całkowitej, a nie samą liczbę całkowitą. appendBytes:length: oczekuje wskaźnika na bufor danych i rozmiar bufora danych. W tym przypadku "bufor danych" jest liczbą całkowitą.

[myData appendBytes:&myInteger length:sizeof(myInteger)]; 

Należy jednak pamiętać, że do zakodowania tego będzie używana endomancja komputera. Jeśli planujesz zapisywanie danych w pliku lub wysyłanie go przez sieć, powinieneś użyć znanej endianness. Na przykład, aby przekonwertować z hostem (urządzenie) do endianness sieci użyj htonl():

uint32_t theInt = htonl((uint32_t)myInteger); 
[myData appendBytes:&theInt length:sizeof(theInt)]; 
+0

Dzięki za cynk na ntohl(), to jest wysyłanych przez sieć :) – holz

+0

Thanks a lot to mi pomoże – akin