網頁

2013年9月2日 星期一

iOS開發筆記 - int8_t及Byte的小差別

在寫iOS app時,宣告byte陣列使用時(尤其是在網路封包的raw data上),我個人在查資料時,最常見的是int8_t,不過在我實際使用上,卻發現一個小差別,最好還是用Byte,例如:

int8_t aa = (int8_t) 0xe0;
Byte bb = (Byte) 0xe0;


NSlog(@"data: %02x",aa);  --> 顯示:e0
NSlog(@"data: %02x",bb);  --> 顯示:e0

像上述這樣寫,是沒有差別的,使用上是ok的,但如果是接收資料再從NSData轉換過來就有不同了,例如,假設NSData *aa的第一個元素是e0

int8_t *rawData = malloc(sizeof(int8_t) * aa.length);
[aa getBytes:rawData length:aa.length];
NSlog(@"data: %02x", rawData);  --> 顯示:ffffffe0

Byte *rawData = malloc(sizeof(Byte) * aa.length);
[aa getBytes:rawData length:aa.length];
NSlog(@"data: %02x", rawData);  --> 顯示:e0

若要直接操作byte元素,還是最好用Byte會比較不會有不知名的錯誤。

沒有留言:

張貼留言