2011-11-22 4 views
0

Comment obtenir la valeur d'un certain bit à partir d'un octet ou d'un entier? La seule réponse similaire que j'ai pu trouver est pour un caractère spécifique à l'intérieur d'une chaîne. J'essaie de convertir un nombre binaire en un nombre décimal, et peut-être y a-t-il une façon beaucoup plus simple de le faire, mais je pensais à ceci: multiplier 2^(position d'entier de droite) par 1 ou 0, selon sur la valeur de l'entier à la position précédemment mentionnée. Des conseils?Algorithme de conversion binaire dans l'objectif-c

+3

Qu'est-ce qu'un « int dans un autre int »? –

+0

un 1 à l'intérieur d'un 11101101 – Seany242

+0

Bien que n'étant pas un doublon exact, vous pouvez trouver cette question utile: [C/C++ vérifier si un bit est défini, c'est-à-dire une variable int] (http://stackoverflow.com/q/523724/45249 – mouviciel

Répondre

4
NSString * binary = @"0011010"; 
long value = strtol([b UTF8String], NULL, 2); 
+0

wow Je ne sais pas comment cela fonctionne mais cela rend la vie beaucoup plus facile. Comment cela marche-t-il? – Seany242

1

Il existe plusieurs voies pour obtenir la valeur du bit dans un octet ou un nombre entier. Tout dépend de vos besoins.

Une façon serait d'utiliser un masque avec des opérateurs au niveau du bit.

int result = sourceValue & 8; // 8 -> 0x00001000 
// result non zero if the 4th bit from the right is ON. 

Vous pouvez également décaler les bits un par un et lire, disons, le bit le plus à droite.

for (int i = 0; i < 8; i++) 
    NSLog(@"Bit %d is %@", i, (sourceValue % 2 == 0) ? @"OFF" : @"ON"); 
    sourceValue = sourceValue >> 1; // shift bits to the right for next loop. 
} 

Ou si vous voulez juste la représentation de texte pour un entier, vous pouvez laisser NSNumber faire le travail:

NSString* myString = [[NSNumber numberWithInt:sourceValue] stringValue]; 
+0

merci beaucoup! Je suis assez novice en programmation, pourriez-vous m'expliquer un peu? La valeur de la source est-elle un int? et qu'est-ce que le (sourceValue% 2 == 0)? @ "OFF": @ "ON" partie faire? – Seany242

+0

Dans mes exemples de code, 'sourceValue' est un' int' et contient la valeur dont vous voulez extraire les bits. Le '(condition)? value1: value2' part est un [opérateur ternaire] (http://stackoverflow.com/questions/2595392/what-does-the-question-mark-and-the-colon-ternary-operator-mean-in-objectiv) . C'est similaire à une instruction if. 'a% b' est l'opérateur [modulo] (http://en.wikipedia.org/wiki/Modulo_operation). Il renvoie le reste de la division 'a/b'. –

+0

est-ce que scorevalue commence à 1 – Seany242