我正在尝试创建一个应用程序,使用Dock到RS232线(我从RedPark购买)与其他硬件进行通信。我也在使用redpark提供的库。我在开始时制作了一个简单的代码,它运行正常。
UInt8 infoCmd [5] = {0x3E,0x3E,0x05,0x80,0xff};
[rscMgr写道:infoCmd长度:5];
然后我想添加更多命令,所以我创建了一个方法,返回我需要的命令的不同组合。
- (UInt8 *)requestCommand:(int)commandName{
UInt8 * command;
if (commandName == DATADUMP) {
command=[Communication buildDataDump];
}
if (commandName == GETSERIALINFO) {
command=[Communication buildGetSerailInfo];
}
return command;
}
+ (UInt8 *)buildGetSerailInfo{
UInt8 *command = malloc(sizeof(UInt8)*5);
command[0]=SYN;
command[1]=SYN;
command[2]=ENQ;
command[3]=GETSERIALINFO;
//command[4] = {SYN, SYN, ENQ, GETSERIALINFO};
return command;
}
问题是,我的一些命令包括200字节长的数据。如何创建一个更容易添加字节的UInt8数组? 我是编程新手,请详细解释。非常感谢你提前。
答案 0 :(得分:1)
实际上你只需通过线路发送数据,行字节。我在一个项目中做了类似的事情(不是电线,而是TCP / IP上的RS232命令),如果你使用NSMutableData实例,它会变得非常简单。
我的代码中的代码段:
static u_int8_t codeTable[] = { 0x1b, 0x74, 0x10 };
static u_int8_t charSet[] = { 0x1b, 0x52, 0x10 };
static u_int8_t formatOff[] = { 0x1b, 0x21, 0x00 };
static u_int8_t reverseOn[] = { 0x1d, 0x42, 0x01 };
static u_int8_t reverseOff[]= { 0x1d, 0x42, 0x00 };
static u_int8_t paperCut[] = { 0x1d, 0x56, 0x0 };
NSMutableData *mdata = [NSMutableData dataWithBytes:&formatOff length:sizeof(formatOff)];
[mdata appendBytes:&formatOff length:sizeof(formatOff)];
[mdata appendBytes:&reverseOff length:sizeof(reverseOff)];
[mdata appendData: [NSData dataWithBytes: &codeTable length:sizeof(codeTable)]];
[mdata appendData: [NSData dataWithBytes: &charSet length:sizeof(charSet)]];
如您所见,我只是逐字节追加数据。