NSInteger в двоичное (строковое) значение в 8-битном формате - PullRequest
5 голосов
/ 17 декабря 2009

Джаррет Харди (спасибо!) Опубликовал этот код вчера, чтобы преобразовать 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);

Спасибо !!!!!!

Ответы [ 3 ]

12 голосов
/ 17 декабря 2009

Это должно работать:

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);
5 голосов
/ 17 августа 2013

Если кому-то интересно, вот моя версия:

Отрывок:

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];
}
3 голосов
/ 10 октября 2012

Для справки и в поддержку ответа @vincent osinga. Вот этот код, обернутый в C-функцию ... который возвращает двоичную "строку" из NSUInteger ... идеально подходит для записи побитовых typedef и т. Д. 1001 *

- (NSString*) bitString:(NSUInteger) mask{
    NSString *str = @"";
    for (NSUInteger i = 0; i < 8 ; i++) {
      // Prepend "0" or "1", depending on the bit
      str = [NSString stringWithFormat:@"%@%@", 
                      mask & 1 ? @"1" : @"0", str];
      mask >>= 1;
    }
    return str;
}

Я не думаю, что NSInteger numberCopy = theNumber; необходимо, поскольку вы не используете указатель, а просто примитивное значение в качестве аргумента, // so you won't change your original value. Это позволит использовать в качестве результатов / результатов, как ...

NSEventType anEvent = NSLeftMouseUp|NSLeftMouseDown;
NSLog(@"%@, %u\n%@, %u\n%@, %u\n%@, %u", 
    bitString( NSScrollWheel), NSScrollWheel,
    bitString( NSLeftMouseUp|NSLeftMouseDown),
               NSLeftMouseUp|NSLeftMouseDown, 
    bitString( anEvent ), anEvent, 
    bitString( NSAnyEventMask ), NSAnyEventMask);

NSLOG ➞

00010110, 22  /* NSScrollWheel */
00000011, 3   /* NSLeftMouseUp | NSLeftMouseDown */
00000011, 3   /* same results with typedef'ed variable */
11111111, 4294967295  /* NSAnyEventMask */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...