最近的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)行交流。