最近的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是八個字節。其次就是根據自己的需要進行基本的數據類型轉換了,有疑問可以進行交流。