2011-03-30 68 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