最近的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)度來(lái)傳)
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來(lái)接收參數(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];
通過(guò)for循環(huán)可以給定義的_paraByte按位賦值差油。最后通過(guò)一個(gè)將_paraByte轉(zhuǎn)成NSData就可以發(fā)送給設(shè)備拗军。完成了數(shù)據(jù)包的拼接。
for (NSInteger i=8; i<appendData.length+8蓄喇;i++){
_paraByte[i]=contentByte[i-8];//為什么從第8位開(kāi)始因?yàn)槲覀兊臄?shù)據(jù)協(xié)議規(guī)定內(nèi)容是從第8位開(kāi)始发侵,前面的都是包頭、命令妆偏、長(zhǎng)度刃鳄、等信息。
}
2.以上就是從app到設(shè)備钱骂,接下來(lái)說(shuō)從設(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)換了蔓肯,有疑問(wèn)可以進(jìn)行交流创南。