проблема в массиве символьных типов в цели c - PullRequest
0 голосов
/ 16 сентября 2011

У меня проблема с кодом, пожалуйста, помогите мне. Вот мой код.

printerView *pvvc=[[printerView alloc] init];
    //[pvvc PrintImage:pvvc.printImageButton];
    //[pvvc getCheckSum];
    NSMutableArray *arrOrderVal=[pvvc getCheckSum];
    unsigned char buffer2[24];
    buffer2[0] = 0X55; buffer2[1]=0x66; buffer2[2]=0x77; buffer2[3]=0x88; buffer2[4]=0x44;//print command
    buffer2[5] = 0X1D; buffer2[6]=0x6B; buffer2[7]=02; buffer2[8]=0x0D; 
    //<set order data
    int arrStart=9;
    for (int i=0; i<13; i++) {
        NSString *val=[arrOrderVal objectAtIndex:i];
        buffer2[arrStart+i]=([val intValue]+30);//[NSString stringWithFormat:@"0x%d",([val intValue]+30)];
    }
    //</set order data

    /*buffer2[9] = 0X35; buffer2[10]=0x30; buffer2[11]=0x30; buffer2[12]=0x30; buffer2[13]=0x33;
     buffer2[14] = 0X35; buffer2[15]=0x37; buffer2[16]=0x37; buffer2[17]=0x30; buffer2[18]=0x33;
     buffer2[19] = 0X30; buffer2[20]=0x31; buffer2[21]=0x38; */

    buffer2[22]=0x37; buffer2[23]=0x30;
    for (int i=0; i<24; i++) {
        NSLog(@"%c",buffer2[i]);
    }

Я хочу динамически добавлять значения для этого массива. значения в том же формате, что я прокомментировал.

but this printing it empty values. as below.
2011-09-16 11:58:37.610 SushiTeria[2024:700b] U
2011-09-16 11:58:38.993 SushiTeria[2024:700b] f
2011-09-16 11:58:39.534 SushiTeria[2024:700b] w
2011-09-16 11:58:39.927 SushiTeria[2024:700b] à
2011-09-16 11:58:40.321 SushiTeria[2024:700b] D
2011-09-16 11:58:40.704 SushiTeria[2024:700b] 
2011-09-16 11:58:41.075 SushiTeria[2024:700b] k
2011-09-16 11:58:41.459 SushiTeria[2024:700b] 
2011-09-16 11:58:41.863 SushiTeria[2024:700b] 
2011-09-16 11:58:42.279 SushiTeria[2024:700b] 
2011-09-16 11:58:42.695 SushiTeria[2024:700b] 
2011-09-16 11:58:43.044 SushiTeria[2024:700b] 
2011-09-16 11:58:43.438 SushiTeria[2024:700b] 
2011-09-16 11:58:43.844 SushiTeria[2024:700b] 
2011-09-16 11:58:45.351 SushiTeria[2024:700b] 
2011-09-16 11:58:45.756 SushiTeria[2024:700b] 
2011-09-16 11:58:46.229 SushiTeria[2024:700b] 
2011-09-16 11:58:46.622 SushiTeria[2024:700b] 
2011-09-16 11:58:47.039 SushiTeria[2024:700b] 
2011-09-16 11:58:48.039 SushiTeria[2024:700b] 
2011-09-16 11:58:48.782 SushiTeria[2024:700b] 
2011-09-16 11:58:49.299 SushiTeria[2024:700b] 
2011-09-16 11:58:49.862 SushiTeria[2024:700b] 7
2011-09-16 11:58:50.616 SushiTeria[2024:700b] 0

Спасибо заранее. Шивам

Ответы [ 3 ]

0 голосов
/ 24 сентября 2011

Предполагая, что ваш arrOrderVal содержит строку из десятичных чисел, состоящих из одной цифры, и вы пытаетесь вставить эквивалент ascii этих символов в ваш буфер, тогда как @Cocoanetics говорит, что ваша проблема в том, что вы добавляете десятичное число 30.«0» в таблице символов ASCII находится в шестнадцатеричном формате (десятичное число 48).Поэтому, если я понимаю, что вы пытаетесь сделать правильно, вы должны изменить:

buffer2[arrStart+i]=([val intValue]+30

на

buffer2[arrStart+i]=([val intValue]+48
0 голосов
/ 24 сентября 2011

Вместо добавления 30 и последующей печати символа вы можете распечатать десятичное или шестнадцатеричное значение.

NSLog(@"decimal: %d", buffer2[i]);

или

NSLog(@"hex: %x", buffer2[i]);

Вы также можете распечатать сам символ, чтобы обеспечить контекст:

NSLog(@"hex + char: %x (%c)", buffer2[i], buffer2[i]);
0 голосов
/ 24 сентября 2011

Вы добавляете 30 (десятичное число), но вы выводите гекс.Поэтому я думаю, что вы находитесь в ряду невидимых персонажей.Разве не начало в 65?

...