iOS:发送自定义的uint8数组

时间:2012-06-29 20:07:53

标签: objective-c ios cocoa-touch

我正在尝试创建一个应用程序,使用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数组? 我是编程新手,请详细解释。非常感谢你提前。

1 个答案:

答案 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)]];

如您所见,我只是逐字节追加数据。