2012-07-16 141 views
0

我目前正在一个服务器客户端项目,我正在写一个小的tcp iPhone应用程序客户端。问题是,我已经向服务器发送一个“数据包”具有以下formae:0x02,0x03十六进制字符在objective-c

0x02 +字符串+ 0x09 +一个int + 0x03

的问题是,我不知道如何包含0x02(如十六进制)。最后,我应该把所有东西都发送成NSData。

这是我到目前为止。

unsigned char tag_start = 0x02; 
unsigned char tag_end = 0x03; 
unsigned char tag_split = 0x09; 

NSString * stringToSend = [NSString stringWithFormat: @"%c%@%c%@%c%@%c%@%c", tag_start, oobject, tag_split, oid, tag_split, oaction, tag_split, ovalue, tag_end]; 

NSData * dataToSend = [[NSData alloc] initWithData:[stringToSend dataUsingEncoding:NSASCIIStringEncoding]]; 
+0

这是怎么回事? – kennytm 2012-07-16 13:42:20

+0

错误的是,STX 0x02将变为NSString 0x32 – Thomas 2012-07-16 14:15:14

+0

要将NSInteger(或无符号字符)转换为十六进制字符串,可以使用NSString的'%x'格式说明符。就像这样:'[NSString stringWithFormat @“0x%x”,tag_start“]'会产生0x2(与0x02的值相同) – 2012-07-16 14:20:09

回答

0

试试这个方法:

NSString *_command = @"\x02...\x09...\x03"; 

应该工作。

0

我使用的,在类似的问题,在NSMutableData并用appendBytes然后工作(追加STX,ETX,CSM)或appendData(的NSString)。

+0

感谢您的回复。我已经尝试过,但遇到问题要添加STX,...您是如何添加它们的? – 2012-07-17 10:48:42

0

继承人它是如何工作的:

NSMutableData * mutableData = [[NSMutableData alloc] init]; 

// Appends STX 
[mutableData appendData: [NSData dataWithBytes: "\x02" length:1]]; 

// Appends ETX 
[mutableData appendData: [NSData dataWithBytes: "\x09" length:1]]; 

// Appends CSM 
[mutableData appendData: [NSData dataWithBytes: "\x03" length:1]]; 

我的问题是,该服务器没有我的消息作出响应,但消息是正确的。