Sto cercando di capire come convertire un NSInteger, diciamo 56, in un NSString che è una rappresentazione binaria del valore originale (int). Forse qualcuno conosce una tecnica di formattazione che può accettare 56 e restituire "111000" in Objective C. Grazie a tutti.Come convertire NSInteger in un valore binario (stringa)
risposta
Non esiste un operatore di formattazione incorporato per farlo. Se si voleva convertirlo in una stringa esadecimale, si potrebbe fare:
NSString *str = [NSString stringWithFormat:@"%x", theNumber];
Per convertirlo in una stringa binaria, si dovrà costruire da soli:
NSMutableString *str = [NSMutableString stringWithFormat:@""];
for(NSInteger numberCopy = theNumber; numberCopy > 0; numberCopy >>= 1)
{
// Prepend "0" or "1", depending on the bit
[str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}
Approssimativamente:
-(void)someFunction
{
NSLog([self toBinary:input]);
}
-(NSString *)toBinary:(NSInteger)input
{
if (input == 1 || input == 0) {
return [NSString stringWithFormat:@"%d", input];
}
else {
return [NSString stringWithFormat:@"%@%d", [self toBinary:input/2], input % 2];
}
}
Cosa succede se l'input è zero? – epatel
Questo fallisce se l'input è 0 (o, in effetti, se l'ultimo bit è 0), e alloca e rilascia anche N oggetti stringa, dove N è il numero di bit nel numero. Non molto efficiente. –
Quindi circa. Ma buona cattura. –
NSString * binaryStringFromInteger(int number)
{
NSMutableString * string = [[NSMutableString alloc] init];
int spacing = pow(2, 3);
int width = (sizeof(number)) * spacing;
int binaryDigit = 0;
int integer = number;
while(binaryDigit < width)
{
binaryDigit++;
[string insertString:((integer & 1) ? @"1" : @"0")atIndex:0];
if(binaryDigit % spacing == 0 && binaryDigit != width)
{
[string insertString:@" " atIndex:0];
}
integer = integer >> 1;
}
return string;
}
ho iniziato dalla versione di Adam Rosenfield, e modificato a:
- aggiungere gli spazi tra i byte
- maniglia firmato interi
Esempio di output:
-7 11111111 11111111 11111111 11111001
7 00000000 00000000 00000000 00000111
-1 11111111 11111111 11111111 11111111
2147483647 01111111 11111111 11111111 11111111
-2147483648 10000000 00000000 00000000 00000000
0 00000000 00000000 00000000 00000000
2 00000000 00000000 00000000 00000010
-2 11111111 11111111 11111111 11111110
si ottiene uno di questi errori gialli se non fai 'NSMutableString * str = [NSMutableString stringWithFormat : @ ""]; ' –