2013-09-30 144 views
1
NSString *strVal= @"BAAA"; 

如何將上述字符串轉換爲位值?我應該在這之前進行字節轉換嗎? 需要幫助。我以前檢查過整數轉換的this question將NSString轉換爲位值

+1

難道這應該是一個數的十六進制表示?你是否應該將它轉換爲unicode的二進制表示?或者是什麼? –

+0

您可以使用dataUsingEncoding將NSString轉換爲可以輕鬆訪問的octect流的NSData對象。你也可以將它轉換成一個C風格的字符串,並從那裏開始。但我懷疑你的問題是那麼簡單。你真的在做什麼?請稍微具體一點。 –

回答

1

無論你將字符串轉換爲UTF-8是否由你決定,這取決於你想要的。內部NSString使用unichar類型將字符存儲爲UTF-16(實際上可能是UCS-2),因此您需要決定是要內部表示還是其他外部編碼的二進制。

我希望你想要的UTF-8編碼的二進制,所以試試這個(測試):

#import <Foundation/Foundation.h> 

@interface BinFuncs : NSObject 
+ (NSString *)binaryOfString:(NSString *)str; 
@end 

@implementation BinFuncs 

+ (NSString *)binaryOfString:(NSString *)str { 
    NSMutableString *binStr = [[NSMutableString alloc] init]; 
    const char *cstr = [str UTF8String]; 
    size_t len = strlen(cstr); 
    for (size_t i = 0; i < len; i++) { 
     uint8_t c = cstr[i]; 
     for (int j = 0; j < 8; j++) { 
      [binStr appendString:((c & 0x80) ? @"1" : @"0")]; 
      c <<= 1; 
     } 
    } 
    return binStr; 
} 

@end 

int main(int argc, const char **argv) { 
    @autoreleasepool { 
     for (int i = 1; i < argc; i++) { 
      NSString *binStr = [BinFuncs binaryOfString:[NSString stringWithUTF8String:argv[i]]]; 
      NSLog(@"%@", binStr); 
     } 
    } 

    return 0; 
} 

$ clang -o binstr binstr.m -framework Foundation 
$ ./binstr 'the quick brown fox jumps over the lazy dog' 
2013-09-30 09:19:49.674 binstr[58474:707] 01110100011010000110010100100000011100010111010101101001011000110110101100100000011000100111001001101111011101110110111000100000011001100110111101111000001000000110101001110101011011010111000001110011001000000110111101110110011001010111001000100000011101000110100001100101001000000110110001100001011110100111100100100000011001000110111101100111