从数组的const unsigned char输入的XCode IOS方法

从数组的const unsigned char输入的XCode IOS方法,ios,arrays,function,methods,initializer,Ios,Arrays,Function,Methods,Initializer,目前,我有许多实例方法用于生成一些数据,我想对一个方法进行更改,该方法接受我传递给它的输入,编译器告诉我数组初始值设定项必须是初始值设定项列表或字符串文本 我将字符串传递给方法,如下所示:- [self buildrawdata2:(const unsigned char *)"0ORANGE\0"]; [self buildrawdata1:@"0APPLES"]; [self buildrawdata1:@"0ORANGE"]; 以下是当数组使用设置为“0ORANGE\0”的字符

目前,我有许多实例方法用于生成一些数据,我想对一个方法进行更改,该方法接受我传递给它的输入,编译器告诉我数组初始值设定项必须是初始值设定项列表或字符串文本

我将字符串传递给方法,如下所示:-

  [self buildrawdata2:(const unsigned char *)"0ORANGE\0"];
 [self buildrawdata1:@"0APPLES"];
 [self buildrawdata1:@"0ORANGE"];
以下是当数组使用设置为“0ORANGE\0”的字符串时可以使用的方法,我传递的字符串也缺少结尾处的“\0”,我相信这是因为它是一个控制字符/转义序列,是否仍有保留该字符串并像下面硬编码的字符串一样传递它:-

 - (void)buildrawdata2:(const unsigned char *)inputString2;

 {
     NSLog(@"ViewController::buildrawdata2");
     NSLog(@"ViewController::buildrawdata2 - inputstring2: %s", inputString2);

     //this works when set like this
     const unsigned char magic2[] = "0ORANGE\0";  

     const uint8_t pattern1 = {0xFC};
     const uint8_t pattern2 = {0xE0};

     uint8_t rawdata2[56];
     uint8_t index = 0;

     int byte = 0;
     int bit = 0;

     while (magic2[byte] != 0x00) {

         while (bit < 8) {

        if (magic2[byte] & (1<<bit)) {
            //add pattern2 to the array
            rawdata2[index++] = pattern2;
        }else{
            //add pattern1 to the array
            rawdata2[index++] = pattern1;
        }

        // next bit please
        bit++;
      }

      //next byte please
      byte++;

      //reset bit index
      bit = 0;

      }

      NSLog(@"buildrawdata2::RawData %@", [NSData dataWithBytes:rawdata2 length:56]);

     }
-(void)buildrawdata2:(const unsigned char*)inputString2;
{
NSLog(@“ViewController::buildrawdata2”);
NSLog(@“ViewController::buildrawdata2-inputstring2:%s”,inputstring2);
//当设置为这样时,此选项有效
常量无符号字符magic2[]=“0橙色\0”;
const uint8_t pattern1={0xFC};
常量uint8_t pattern2={0xE0};
uint8_t原始数据2[56];
uint8_t指数=0;
int字节=0;
int位=0;
while(magic2[字节]!=0x00){
while(位<8){

如果(magic2[byte]&(1看起来我已经找到了解决方案,我很乐意听到其他人对该方法的看法或改进建议

我没有将传递到方法中的字符串直接更新数组初始值设定项,而是使用该字符串来确定应该使用哪个数组初始值设定项。为此,我必须在if块之前创建一个指针,以便可以从if块中为其分配字符串

 const unsigned char *magic = NULL;

 if (inputString == @"0APPLES") { magic = (const unsigned char*) "0APPLES\0";}
 else if (inputString == @"0ORANGE") { magic = (const unsigned char*) "0ORANGE\0";}
最近也尝试过这种方法,而且它也能起作用:-

 const unsigned char apples[] = "0APPLES\0";
 const unsigned char orange[] = "0ORANGE\0";
 const unsigned char *magic;

 if (inputString2 == @"0APPLES") { magic = apples;}
 else if (inputString2 == @"0ORANGE") { magic = orange;}
然后可以这样调用该方法:-

  [self buildrawdata2:(const unsigned char *)"0ORANGE\0"];
 [self buildrawdata1:@"0APPLES"];
 [self buildrawdata1:@"0ORANGE"];