socket通訊數據格式的轉換

最近的1個月時間一直在調試socket通訊,總結了下nsstring、nsinterg...一些基本數據類型與nsdata、或者byte的轉換。

1.app給設備發送數據

以硬件設備為例,一般設備接收的是byte數組。提供nsstring與nsinger轉byte的方法,當然方法很多,這只是其中的一種。

_paraByte[3]=0xfc;我定義的是一個長度為256的字節數組,成員變量。

_paraByte[5]=0X08;//命令符

uint32_t severPort=8080;(將port傳給設備,以4個字節的長度來傳)

Byte one = (Byte) (0xff000000 & severPort >> 24);

Byte two = (Byte) ((0x00ff0000 & severPort) >> 16);

Byte three = (Byte) ((0x0000ff00 & severPort) >> 8);

Byte four = (Byte) ((0x000000ff & severPort) >> 0);

//結束標識符_paraByte[254]=0xff;_paraByte[255]=0xee;

NSMutableData *appendData=[NSMutableData data];//用一個可變data來接收參數

NSString *str = self.URLTX.text;

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(NSASCIIStringEncoding);

NSData *data = [str dataUsingEncoding:enc];

[appendData appendData:data];

[appendData appendBytes:&one length:1];

[appendData appendBytes:&two length:1];

[appendData appendBytes:&three length:1];

[appendData appendBytes:&four length:1];

Byte *contentByte = (Byte *)[appendData bytes];

通過for循環可以給定義的_paraByte按位賦值。最后通過一個將_paraByte轉成NSData就可以發送給設備。完成了數據包的拼接。

for (NSInteger i=8; i<appendData.length+8;i++){

_paraByte[i]=contentByte[i-8];//為什么從第8位開始因為我們的數據協議規定內容是從第8位開始,前面的都是包頭、命令、長度、等信息。

}


2.以上就是從app到設備,接下來說從設備到app,設備回發的都是二進制數據,還是直接貼代碼吧,最直接


這里強調下,uint16_t是兩個字節,8一個字節,24三個字節 ,32四個字節,int是4個字節,nsinter是八個字節。其次就是根據自己的需要進行基本的數據類型轉換了,有疑問可以進行交流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設置( [NSUserDefaul...
    彬至睢陽閱讀 3,005評論 0 7
  • 嘟噥嘟噥:最近接到一個任務:在客戶端動態生成RSA密鑰對,然后向服務器發送這個密鑰對中的公鑰字符串,由服務器進行公...
    TimmyR閱讀 8,098評論 19 21
  • iPhone的標準推薦是CFNetwork 庫編程,其封裝好的開源庫是 cocoa AsyncSocket庫,用它...
    Ethan_Struggle閱讀 2,279評論 2 12
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 2015必將很重要。 度過了艱難歲月的高三 那些與書為伴 與題并進的夜晚 課堂和晚自習 盡管進行時很想快點成為過去...
    曖潮詠卟変閱讀 261評論 0 0