2011-03-30 85 views
1

我遇到了一些问题。将NSString转换为ASCII Binary Equivilent(然后再次返回到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,但我仍然有很多的问题。有人可以帮我吗? :)

+0

我在想这篇文章,以及一些位移和屏蔽可能会做的伎俩,但我仍然不知道如何将NSString首先转换为只有ascii字符。 http://stackoverflow.com/questions/2832729/how-to-convert-ascii-value-to-a-character-in-objective-c – 2011-03-30 19:33:28

回答

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字符。

2

转换的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; 
} 
+0

这并没有太大的工作,因为它拉出了整数的所有32位。但是你的代码让我思考。我已经发布了最终为我工作的东西。感谢您的正确方向! – 2011-03-31 00:04:19