Objective c iOS:发送自定义uint8阵列

Objective c iOS:发送自定义uint8阵列,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我正在尝试制作一个应用程序,使用dock-to-RS232线(我从RedPark购买)将iPhone与其他硬件进行通信。我也在使用redpark提供的图书馆。我在开始时做了一个简单的代码,效果很好。 UInt8 infoCmd[5]={0x3E,0x3E,0x05,0x80,0xff}; [rscMgr write:infoCmd长度:5] 然后我想向它添加更多的命令,所以我创建了一个方法,返回我需要的不同命令组合 - (UInt8 *)requestCommand:(int)commandNa

我正在尝试制作一个应用程序,使用dock-to-RS232线(我从RedPark购买)将iPhone与其他硬件进行通信。我也在使用redpark提供的图书馆。我在开始时做了一个简单的代码,效果很好。 UInt8 infoCmd[5]={0x3E,0x3E,0x05,0x80,0xff}; [rscMgr write: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数组?
我是编程新手,请给我详细解释一下。事先非常感谢。

实际上,您只需通过线路发送数据,行字节。我在一个项目中做了类似的事情(不是wire,而是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)]];

如您所见,我只是一个字节一个字节地添加数据。

实际上,您只需通过线路发送数据,行字节。我在一个项目中做了类似的事情(不是wire,而是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)]];


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

当您在objective-C中使用UInt8s和“C”函数时,您怎么会对编程不熟悉?更不用说发送和接收串行端口,以及malloc等了?//请详细解释//如果您甚至不理解现在输出的代码,你怎么能指望我们给你一个详细的答案呢?对马克斯说:几年前我在学校里学过一点编码,但在基础c课之后就再也没学过。对于trumpetlicks:我在labview上工作了一段时间,使用串行端口。并且已经在这个项目上工作了两个月了。当你在objective-C中使用UInt8s和“C”函数时,你怎么会对编程不熟悉呢?更不用说发送和接收串行端口,以及malloc等等了?//请向我详细解释//如果你甚至不理解你现在输出的代码,你怎么能指望我们给你一个详细的答案呢?对马克斯说:几年前我在学校里学过一点编码,但在基础c课之后就再也没学过。对于trumpetlicks:我在labview上工作了一段时间,使用串行端口。并且已经为这个项目工作了两个月了。谢谢!这正是我要问的。我还有一个问题。我创建了一个NSMutableData,并尝试使用[rscMgr write:data Length:5]发送数据。错误:它给了我一个错误和警告:不允许将Objective-C指针隐式转换为“UInt8*”(也称为“unsigned char*”),带有ARC警告:不兼容的指针类型将“NSMutableData*\uu strong”发送到“UInt8*”(也称为“unsigned char*”)类型的参数您对如何解决这个问题有什么建议吗?请尝试
[rscMgr write:&data Length:5]
我购买了RedPark硬件,他们提供了一个库来帮助开发。RscMgr是他们提供的NSO对象,也包含通信协议(波特率、奇偶校验…)(int)写入:(UInt8*)数据长度:(UInt32)长度;我将(UInt8*)数据更改为(NSMutableData*)数据,警告和错误消失。让我试试看是否有效。:)嗨,我只是想更新一下。我测试了代码。我想发送一个命令{0x7A,0x7A,0x05,0x8B},但它发送了{18 C8 79 3F 02 18 C8 79 3F 02}。我在想也许NSMutableData会在发送之前对它进行编码?所以我在网上搜索发现这段代码对我很有用:Byte*byteData=(Byte*)malloc(length);memcpy(字节数据,[可变数据字节],长度);非常感谢。这正是我要问的。我还有一个问题。我创建了一个NSMutableData,并尝试使用[rscMgr write:data Length:5]发送数据。错误:它给了我一个错误和警告:不允许将Objective-C指针隐式转换为“UInt8*”(也称为“unsigned char*”),带有ARC警告:不兼容的指针类型将“NSMutableData*\uu strong”发送到“UInt8*”(也称为“unsigned char*”)类型的参数您对如何解决这个问题有什么建议吗?请尝试
[rscMgr write:&data Length:5]
我购买了RedPark硬件,他们提供了一个库来帮助开发。RscMgr是他们提供的NSO对象,也包含通信协议(波特率、奇偶校验…)(int)写入:(UInt8*)数据长度:(UInt32)长度;我将(UInt8*)数据更改为(NSMutableData*)数据,警告和错误消失。让我试试看是否有效。:)嗨,我只是想更新一下。我测试了代码。我想发送一个命令{0x7A,0x7A,0x05,0x8B},但它发送了{18 C8 79 3F 02 18 C8 79 3F 02}。我在想也许NSMutableData会在发送之前对它进行编码?所以我在网上搜索发现这段代码对我很有用:Byte*byteData=(Byte*)malloc(length);memcpy(字节数据,[可变数据字节],长度);