socket通訊數(shù)據(jù)格式的轉(zhuǎn)換

最近的1個(gè)月時(shí)間一直在調(diào)試socket通訊,總結(jié)了下nsstring、nsinterg...一些基本數(shù)據(jù)類型與nsdata、或者byte的轉(zhuǎn)換。

1.app給設(shè)備發(fā)送數(shù)據(jù)

以硬件設(shè)備為例,一般設(shè)備接收的是byte數(shù)組。提供nsstring與nsinger轉(zhuǎn)byte的方法,當(dāng)然方法很多,這只是其中的一種。

_paraByte[3]=0xfc;我定義的是一個(gè)長(zhǎng)度為256的字節(jié)數(shù)組,成員變量。

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

uint32_t severPort=8080;(將port傳給設(shè)備,以4個(gè)字節(jié)的長(zhǎng)度來傳)

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

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

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

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

//結(jié)束標(biāo)識(shí)符_paraByte[254]=0xff;_paraByte[255]=0xee;

NSMutableData *appendData=[NSMutableData data];//用一個(gè)可變data來接收參數(shù)

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循環(huán)可以給定義的_paraByte按位賦值。最后通過一個(gè)將_paraByte轉(zhuǎn)成NSData就可以發(fā)送給設(shè)備。完成了數(shù)據(jù)包的拼接。

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

_paraByte[i]=contentByte[i-8];//為什么從第8位開始因?yàn)槲覀兊臄?shù)據(jù)協(xié)議規(guī)定內(nèi)容是從第8位開始,前面的都是包頭、命令、長(zhǎng)度、等信息。

}


2.以上就是從app到設(shè)備,接下來說從設(shè)備到app,設(shè)備回發(fā)的都是二進(jìn)制數(shù)據(jù),還是直接貼代碼吧,最直接


這里強(qiáng)調(diào)下,uint16_t是兩個(gè)字節(jié),8一個(gè)字節(jié),24三個(gè)字節(jié) ,32四個(gè)字節(jié),int是4個(gè)字節(jié),nsinter是八個(gè)字節(jié)。其次就是根據(jù)自己的需要進(jìn)行基本的數(shù)據(jù)類型轉(zhuǎn)換了,有疑問可以進(jìn)行交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 嘟噥嘟噥:最近接到一個(gè)任務(wù):在客戶端動(dòng)態(tài)生成RSA密鑰對(duì),然后向服務(wù)器發(fā)送這個(gè)密鑰對(duì)中的公鑰字符串,由服務(wù)器進(jìn)行公...
    TimmyR閱讀 8,353評(píng)論 19 21
  • iPhone的標(biāo)準(zhǔn)推薦是CFNetwork 庫編程,其封裝好的開源庫是 cocoa AsyncSocket庫,用它...
    Ethan_Struggle閱讀 2,357評(píng)論 2 12
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,603評(píng)論 30 472
  • 2015必將很重要。 度過了艱難歲月的高三 那些與書為伴 與題并進(jìn)的夜晚 課堂和晚自習(xí) 盡管進(jìn)行時(shí)很想快點(diǎn)成為過去...
    曖潮詠卟変閱讀 278評(píng)論 0 0
  • 去湖南之前,湖南發(fā)洪水,家人朋友都勸我不要去,等我到的時(shí)候洪水早已經(jīng)沒有了。 從九江,到萍鄉(xiāng),再到長(zhǎng)沙,其實(shí)本來打...
    那只眺望的飛鳥閱讀 335評(píng)論 0 0

友情鏈接更多精彩內(nèi)容