NSInteger value for binary (string) value in 8 bit format

Jarret Hardie (thanks!) Post this code yesterday to convert NSinteget to binary and it works fine, but I need it in 8-bit format:

4 → 00000100

any ideas on changing this code?

// 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); 

Thanks!!!!!!

+4
source share
3 answers

This should work:

 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); 
+11
source

If anyone is interested, here is my version:

Excerpt:

 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]; } 
+5
source

In the link and in support of @vincent osinga answer .. Here is this code wrapped in a C-function .. that returns a binary "string" from NSUInteger .. ideal for logging bitwise typedef, etc.

 - (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; } 

I do not think NSInteger numberCopy = theNumber; necessary because you are not using a pointer, but simply a primitive value as an argument // so you won't change your original value . This will allow use as results / results such as ...

 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 */ 
+3
source

All Articles