Ich versuche herauszufinden, wie man einen NSInteger, sagen wir 56, in einen NSString konvertiert, der eine binäre Darstellung des ursprünglichen (int) Wertes ist. Vielleicht kennt jemand eine Formatierungstechnik, die 56 akzeptiert und innerhalb von Ziel C "111000" zurückgibt. Danke an alle.Wie konvertiert man NSInteger in einen binären (string) Wert
Antwort
Dafür gibt es keinen integrierten Formatierungsoperator. Wenn Sie es in eine hexadezimale Zeichenfolge konvertieren möchten, können Sie tun:
NSString *str = [NSString stringWithFormat:@"%x", theNumber];
Um es auf eine binäre Zeichenfolge zu konvertieren, werden Sie es selbst bauen:
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];
}
Grob:
-(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];
}
}
Was ist, wenn die Eingabe Null ist? – epatel
Dies schlägt fehl, wenn die Eingabe 0 ist (oder tatsächlich, wenn das letzte Bit 0 ist). Außerdem werden N String-Objekte zugewiesen und freigegeben, wobei N die Anzahl der Bits in der Zahl ist. Nicht sehr effizient. –
Also grob. Aber guter Fang. –
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;
}
begann ich von Adam Rosenfield-Version und modifiziert:
- hinzufügen Räume zwischen Bytes
- Griff unterzeichnet ganzen Zahlen
Beispielausgabe:
-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
Sie erhalten eine dieser gelben Fehler, wenn Sie das nicht tun 'NSMutableString * str = [NSMutableString string : @ ""]; ' –