2013-03-25 1 views
0

В настоящее время у меня есть несколько методов экземпляра для генерации некоторых данных, которые я хотел бы изменить для одного метода, который принимает ввод, который я передаю ему, компилятор сообщает что инициализатор массива должен быть списком инициализатора или строковым литералом.XCode IOS метод ввода из const unsigned char для массива

Im передавая строку методу, как это: -

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

Вот метод, который работает, когда массив использует строку значение «0ORANGE \ 0», то строка я прохожу через также отсутствует символ «\ 0» с конца, я считаю, что это потому, что его управляющий символ/бежать последовательности, есть в любом случае, чтобы сохранить это и передать его как строку HARDCODED ниже: -

- (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]); 

    } 

ответ

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"];