2010-11-28 114 views
3

我有下面的代碼,從一個插座讀取:將字節轉換爲短或整數

Int8  buffer[102400]; 
UInt8  *buffer_p = buffer;; 
int  bytesRead; 
bytesRead = CFReadStreamRead(stream, buffer, 102400); 

我期待與短(2個字節)短(2個字節)整數開始消息(4個字節)。 我不知道如何將它們轉換爲相應的類型。

我試過如下:

uint16_t zero16 = NTOHS(buffer_p); 
buffer_p += sizeof(uint16_t); 
uint16_t msg_id16 = NTOHS(buffer_p); 
buffer_p += sizeof(uint16_t); 
uint32_t length32 = NTOHL(buffer_p); 
buffer_p += sizeof(uint32_t); 

NSMutableData *data = [NSMutableData dataWithBytes:buffer length:bytesRead]; 

NSRange firstshort = {0,2}; 
NSRange secondshort = {2,2}; 
NSRange intrange = {4,4}; 
short zero; 
[data getBytes:&zero range:firstshort]; 
short msgid; 
[data getBytes:&msgid range:secondshort]; 
int length; 
[data getBytes:&length range:intrange]; 

但不工作。提前致謝。

+0

好問題,終於幫了我。 – 2011-08-09 09:21:04

回答

9

你可能想看看。這定義了一堆可用於讀取各種整數類型或進行字節交換的宏。具體來說,你可以做點像

uint16_t zero16 = OSReadBigInt16(buffer_p, 0); 
uint16_t msg_id16 = OSReadBigInt16(buffer_p, 2); 
uint32_t length32 = OSReadBigInt32(buffer_p, 4); 
+0

絕對奏效!謝謝。 – Unis 2010-11-28 06:18:47