Конвертировать NSString в ASCII Binary Equivilent (а затем снова вернуться к NSString) - PullRequest
1 голос
/ 30 марта 2011

У меня проблемы с этим.

Я хочу взять NSString и преобразовать его в целочисленный массив, содержащий только 0,1 значения, которые будут представлять двоичный эквивалент строки ascii.

Например, скажем, у меня есть следующее

NSString *string = @"A"; // Decimal value 65

Я хочу получить массив

int binary[8] = {0,1,0,0,0,0,0,1};

затем, учитывая, что у меня есть двоичный целочисленный массив, как мне вернуться к строке NSString?

Я знаю, что NSString хранит символы в виде нескольких байтов, но я хочу использовать только ASCII. Я пытался использовать,

NSData *data = [myString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

чтобы преобразовать мою строку в ascii, но у меня все еще много проблем. Может кто-нибудь помочь мне? :)

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

* Обратите внимание, что в этом коде исключено дополнительное требование сохранения битов в массиве целых чисел, чтобы их было легче понять.

// test embed
NSString *myString = @"A"; //65
for (int i=0; i<[myString length]; i++) {
    int asciiCode = [myString characterAtIndex:i];
    unsigned char character = asciiCode; // this step could probably be combined with the last
    printf("--->%c<---\n", character);
    printf("--->%d<---\n", character);
    // for each bit in a byte extract the bit
    for (int j=0; j < 8; j++) {
        int bit = (character >> j) & 1;
        printf("%d ", bit);
    }           
}


// test extraction
int extractedPayload[8] = {1,0,0,0,0,0,1,0}; // A (note the byte order is backwards from conventional ordering)
unsigned char retrievedByte = 0;

for (int i=0; i<8; i++) {
    retrievedByte += extractedPayload[i] << i;
}

printf("***%c***\n", retrievedByte);
printf("***%d***\n", retrievedByte);

Теперь я предполагаю, что мне нужно отфильтровать все символы не ascii из моей строки NSString, прежде чем я сделаю эти шаги.

2 голосов
/ 31 марта 2011

Преобразовать NSString в целое число: (получил по ссылке, опубликованной Беном)

// NSString to ASCII
NSString *string = @"A";
int asciiCode = [string characterAtIndex:0]; // 65

, а затем передать его функции ниже:

NSArray *arrayOfBinaryNumbers(int val) 
{
    NSMutableArray* result = [NSMutableArray array];
    size_t i;
    for (i=0; i < CHAR_BIT * sizeof val; i++) {
        int theBit = (val >> i) & 1;
        [result addObject:[NSNumber numberWithInt:theBit]];
    }
    return result;
}
...