2012-08-03 329 views
0

我正在处理一个处理外部硬件通信的应用程序,并且遇到了获取程序包校验和的问题。 (我还在学习Objective C的同时使这个程序,所以我在这个仍然相当新) 在C语言编写的另一个代码,校验和计算如下:如何计算目标中的CheckSum C

byte CalculateCheckSum (byte txcount){ 
    byte local_cs=0; 
    while(txcount>0){ 
     local_cs+=*x_ptr; 
     x_ptr += 1; 
     txcount--; 
    }; 
    return (~local_cs+1); 
} 

我试图用客观C中的一些代码:

u_int8_t synByteSOH[]= {SYN,SYN,SOH,SETSERIALINFO}; 
- (Byte)CalcCheckSum:(Byte)i 
{ u_int8_t synByteSOH[]= {SYN,SYN,SOH,SETSERIALINFO}; 
    Byte local_cs = 0; 
    int j = 0; 
    while (i>0) { 
     local_cs += synByteSOH[j]; 
     i--; 
     j++; 
    }; 
    return (~local_cs+1); 

} 

无警告或错误,但它说铛:错误:连接命令,退出代码失败1 有谁知道这是为什么?我该如何解决它?

+0

你在纸上试过了吗? – 2012-08-03 20:45:22

+0

它编译和执行对我来说很好,所以链接器的确切错误信息是什么?听起来你可能只需要做一个干净的构建。 – Brian 2012-08-03 20:46:49

回答

1

它有效的所有有效C代码目标C代码。不要尝试将其重写为Objective C方法 - 对此没有价值。

修改原始函数的窍门是它依赖于几件事情:byte是typedeffed,以及一个名为x_ptr的全局/静态变量。

关于x_ptr,它来自哪里以及它如何在原始文件中初始化,我们从粘贴的片段中什么也不知道。所以假设字节数组synByteSOH是数据块,你需要的校验,只是介绍byte*类型的文件中的静态变量x_ptr并将其初始化到数据块:

typedef unsigned char byte; 
static byte *x_ptr; 

byte CalculateCheckSum (byte txcount) 
//...Follows as pasted 

//... 

//And now we call it elsewhere: 
byte synByteSOH[]= {SYN,SYN,SOH,SETSERIALINFO};   
x_ptr = synByteSOH 
byte Checksum = CalculateCheckSum(4); //4 is the data block size 

在一般情况下,即使在ObjC项目拥有C函数完全可以。从来没有人说每一段代码都应该在类方法中。