2011-06-27 6 views
2

NSStringの(ASCII)テキストをNSStringの2進数に変換できますが、逆の処理をしています。たとえば、「Hi」は「01101000 01101001」になります。バイナリの "String"をNSStringのテキストに変換する

I need: "01101000 01101001" to become "Hi". 

私はこれを実装するための最も直接的方法を探しています。バイナリ数の8ビットごとの間隔に注意してください。フォーマットを考慮し

+0

あなたがCの関数 'strtoul'へのアクセス権を持っていますか? –

答えて

2

は常にそのようなで、このコードは動作するはずです:それの一部が不明であった場合

NSString * 
BinaryToAsciiString (NSString *string) 
{ 
    NSMutableString *result = [NSMutableString string]; 
    const char *b_str = [string cStringUsingEncoding:NSASCIIStringEncoding]; 
    char c; 
    int i = 0; /* index, used for iterating on the string */ 
    int p = 7; /* power index, iterating over a byte, 2^p */ 
    int d = 0; /* the result character */ 
    while ((c = b_str[i])) { /* get a char */ 
     if (c == ' ') { /* if it's a space, save the char + reset indexes */ 
      [result appendFormat:@"%c", d]; 
      p = 7; d = 0; 
     } else { /* else add its value to d and decrement 
        * p for the next iteration */ 
      if (c == '1') d += pow(2, p); 
      --p; 
     } 
     ++i; 
    } [result appendFormat:@"%c", d]; /* this saves the last byte */ 

    return [NSString stringWithString:result]; 
} 

を教えてください。

+0

nice! 'componentsSeparatedByString:' – lreichold

+0

@ ap0stlexなしでこれが可能だったとは思わなかった:それはあなたの要件を達成してうれしい。 '[result appendFormat:...]'を除いて、これはObjective-Cで囲まれた単なるCです。これはマルチバイト文字と複雑になる可能性がありますが、ASCIIを使用しているので、Cで扱うのは簡単です。 – sidyll

1

どういうことですか?

NSString* stringFromBinString(NSString* binString) { 
    NSArray *tokens = [binString componentsSeparatedByString:@" "]; 
    char *chars = malloc(sizeof(char) * ([tokens count] + 1)); 

    for (int i = 0; i < [tokens count]; i++) { 
     const char *token_c = [[tokens objectAtIndex:i] cStringUsingEncoding:NSUTF8StringEncoding]; 
     char val = (char)strtol(token_c, NULL, 2); 
     chars[i] = val; 
    } 
    chars[[tokens count]] = 0; 
    NSString *result = [NSString stringWithCString:chars 
              encoding:NSUTF8StringEncoding]; 

    free(chars); 
    return result; 
} 

(コミュニティのwikiとして投稿 - 私の古い-SKOOL Cのスキルが死んで錆びている - 。:-)これをクリーンアップして自由に感じる)

関連する問題