NSInteger以8位格式表示二进制(字符串)值

osc*_*arp 5 iphone binary objective-c

Jarret Hardie(谢谢!)昨天发布此代码将NSinteget转换为二进制,并且工作正常,但我需要8位格式:

4 - > 00000100

有什么想法来修改这段代码吗?

// Original author Adam Rosenfield... SO Question 655792
NSInteger theNumber = 56;
NSMutableString *str = [NSMutableString string];
for(NSInteger numberCopy = theNumber; numberCopy > 0; numberCopy >>= 1)
{
    // Prepend "0" or "1", depending on the bit
    [str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}

NSLog(@"Binary version: %@", str);
Run Code Online (Sandbox Code Playgroud)

谢谢 !!!!!!

Vin*_*nga 12

这应该工作:

NSInteger theNumber = 56;
NSMutableString *str = [NSMutableString string];
NSInteger numberCopy = theNumber; // so you won't change your original value
for(NSInteger i = 0; i < 8 ; i++) {
    // Prepend "0" or "1", depending on the bit
    [str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
    numberCopy >>= 1;
}

NSLog(@"Binary version: %@", str);
Run Code Online (Sandbox Code Playgroud)


Rud*_*vič 5

如果有人有兴趣,这是我的版本:

片段:

NSString *NSStringWithBits(int64_t mask) {
    NSMutableString *mutableStringWithBits = [NSMutableString new];
    for (int8_t bitIndex = 0; bitIndex < sizeof(mask) * 8; bitIndex++) {
        [mutableStringWithBits insertString:mask & 1 ? @"1" : @"0" atIndex:0];
        mask >>= 1;
    }
    return [mutableStringWithBits copy];
}
Run Code Online (Sandbox Code Playgroud)