0

現在、いくつかのデータを生成するためのインスタンスメソッドがいくつかあり、渡した入力を受け取る単一のメソッドに変更したいのですが、コンパイラは、配列初期化子は初期化子リストまたは文字列リテラルでなければならないと言っています。

このようなメソッドに文字列を渡します:-

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

これは、配列が「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]);

     }
4

1 に答える 1

0

私はこれに対する解決策を考え出したようです。この方法に関する他の人の意見や改善のための提案を聞いてうれしいです。

メソッドに渡された文字列を取得して配列初期化子を直接更新しようとする代わりに、文字列を使用して、使用する配列初期化子を決定しました。これを機能させるには、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 buildrawdata1:@"0APPLES"];
 [self buildrawdata1:@"0ORANGE"];
于 2013-03-26T13:46:49.713 に答える