2010-04-22 42 views
4

我有一個int值需要被轉換成一個字節數組。 你如何在Objective-C中做這件事?有沒有方法可以做到這一點?如何將int轉換爲Objective-C中的字節?

謝謝,

+0

可能的複製:#1 - 在一個char存儲一個int陣列?](http://stackoverflow.com/questions/1522994/store-an-int-in-a-char-array)。至少它可以讓你'char []'。 – 2010-04-22 06:21:19

回答

7

轉換成什麼方式?你想要它在小端,大端還是本地字節順序?如果你想在本地字節順序,那麼所有你需要做的是:

 
int val = //... initialize integer somehow 
char* bytes = (char*) &val; 
int len = sizeof(int); 

也就是說,操縱一個整數的字節最好的辦法是做位操作。例如,爲了獲得最低字節,則可以使用VAL & 0xFF的,讓你使用(val>>8)&0xFF,然後(val>>16)&0xFF,然後(val>>24)&0xFF下一個,等

當然,這取決於你的數據類型的大小。如果你做這些事情,你應該包括<inttypes.h>;,並使用uint8_t,uint16_t,uint32_tuint64_t,這取決於你想要的整數有多大;否則,你不能可靠地玩大量的字節。

+0

假設你知道它是一個整數,你不能只使用一個循環,並使用8的倍數來使用你從'sizeof()'確定的長度來可靠地播放它們的字節嗎? – 2014-03-10 15:04:21

1

我懷疑你想要做的是將這個字節數組可能傳遞給一個NSMutableData對象。你只要通過地址& VAL

例子:

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

此鏈接更加完整,涉及字節序:

Append NSInteger to NSMutableData

+0

對於int型數據,即21,它將在字節數組或字節數組中返回15 00 00 00。 {15,00,00,00}。 但有時候我需要它的逆序,因爲,十六進制或數組中的<00 00 00 15>爲int(21)= {00,00,00,15}。在這種情況下,這種方法將不起作用。 – karim 2012-12-12 21:23:34