我有NSString *a [email protected]"00011"
和NSString *[email protected]"110001"
,我想要做的按位和使用這些字符串(&),也就是說「一」 & 「B」,值應爲00001
。
如何實現這一點,我可以像循環的字符串做手動操作,但我想使用&運算符。如何實現這一目標?NSString的二進制操作
2
A
回答
1
測試的代碼:d
- (void)viewDidLoad
{
[super viewDidLoad];
int a = [self binaryStringToInt:@"100011"];
int b = [self binaryStringToInt:@"110001" ];
int result = a & b;
NSString *resultBinary = [self binaryStringFromNum:result];
NSLog(@"%@", resultBinary);
}
-(int)binaryStringToInt:(NSString *)str {
const char* utf8String = [str UTF8String];
char* endPtr = NULL;
int num = strtol(utf8String, &endPtr, 2);
return num;
}
- (NSString *)binaryStringFromNum:(uint64_t)num {
NSMutableString *str = [[NSMutableString alloc] init];
for(uint64_t numberCopy = num; numberCopy > 0; numberCopy >>= 1)
{
[str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}
return str;
}
4
由於巧合編碼「0」和「1」字符的ASCII的二進制表示使得有可能只執行按位與在字符本身:
'0' & '0' == '0'
'0' & '1' == '0'
'1' & '0' == '0'
'1' & '1' == '1'
這個事實可以輕鬆地執行按位和任意長度的字符串(超過64位數字)。以下實現使用了也適用的UTF16字符。它僅受堆棧大小的限制(由於VLA)。
NSString *StringBinaryAnd(NSString *a, NSString *b)
{
NSUInteger length = [a length];
NSCParameterAssert([b length] == length);
unichar buffer[length];
[a getCharacters:buffer range:(NSRange){.length=length}];
for (NSUInteger i = 0; i < length; i += 1)
buffer[i] &= [b characterAtIndex:i]; // here's the magic
return [[NSString alloc] initWithCharacters:buffer length:length];
}
相關問題
- 1. 無效操作數的二進制表示(「廉政」和「的NSString」)
- 2. PHP二進制操作
- 3. 二進制操作用C
- 4. 二進制文件操作
- 5. 作爲二進制操作的加法
- 6. Erlang二進制文件的二進制操作?
- 7. 打包多值的二進制操作
- 8. 無效的操作數到二進制==
- 9. 純粹的JavaScript二進制操作
- 10. 無效的二進制操作符^
- 11. 位集的二進制與操作
- 12. C中BigInteger的二進制/位操作#
- 13. C中的二進制操作
- 14. 標誌枚舉的二進制操作
- 15. 無效的操作數爲二進制「|」
- 16. 如何轉換的NSString二進制和二進制到十六進制
- 17. NSString的二進制表示形式
- 18. Python二進制文件操作加速
- 19. 二進制搜索樹搜索操作
- 20. Jison:二進制操作語法衝突
- 21. 「二進制‘[’:沒有操作員發現
- 22. 功能和二進制操作
- 23. 二進制文件位操作
- 24. 位操作,插入,二進制
- 25. 二進制文件和操作系統
- 26. 無效操作數爲二進制*
- 27. 評估C二進制操作
- 28. 無效操作數爲二進制*
- 29. 無效操作數爲二進制
- 30. 4位十六進制NSString到二進制
對作業使用正確的數據類型。字符串不是正確的數據類型。 – trojanfoe
您不能在NSString中使用按位運算符。 – Shai
請選擇這個:http://stackoverflow.com/a/7207304/905514 –