将NSString转换为ASCII二进制等效(然后再返回NSString)

时间:2011-03-30 18:10:13

标签: objective-c iphone-sdk-3.0 binary nsstring

我遇到了一些问题。

我想获取一个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 个答案:

答案 0 :(得分:3)

*注意这段代码省去了将位存储到整数数组中的额外要求,以便更容易理解。

// 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);

现在我想在执行这些步骤之前,我必须从NSString中过滤掉任何非ascii字符。

答案 1 :(得分:2)

将NSString转换为Integer :(从Ben发布的链接中获取)

// 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;
}