0
votes

Comment déterminer si une entrée C est un nombre binaire 8 bits

J'écris un programme qui vous découchera avec la conversion de valeurs binaires en hexagonales et inversement.

L'utilisateur doit entrer une valeur qui sera stockée dans une variable int. Je dois déterminer si cette entrée utilisateur est un numéro binaire huit bits comme 10010010, 11110000, 10101010, etc.

J'ai déjà écrit une fonction pour déterminer le nombre de caractères que l'utilisateur entre dans l'utilisateur, mais je ne trouve pas beaucoup sur la manière de vous assurer que l'entrée de l'utilisateur est un 1 ou un 0.

Est-ce juste une solution simple que je ne vois pas?


3 commentaires

Pourquoi ne pas nécessiter que l'utilisateur n'entrera qu'une valeur de 8 bits à l'aide du type non signé Char ou uint8_t ? Sinon, vérifiez simplement si la valeur est -128 à 127 (pour la valeur signée 8 bits) ou 0-255 (pour non signé) Si vous prenez une entrée de caractères de < code> '0's's et 's's's's's's's's's , alors vérifiez simplement que le caractère saisi est ' 0 ' ou ' 1 ' (note , chaque personnage sera 8 bits)


La solution simple que je ne vois pas est ... Si vous prenez l'entrée en tant qu'entrée en tant que sans signé Char (ou int ) et que l'utilisateur entre (dire 9 ), la valeur en mémoire sera déjà 00001001 . Un ordinateur connaît uniquement 0 ou 1 . Donc, peu importe la manière dont vous prenez la valeur numérique comme entrée, il sera stocké en tant que valeur binaire en mémoire et vous êtes libre de manipuler les bits dans la représentation de base que vous aimez.


Je vois ce que tu dis, merci!


3 Réponses :


0
votes

Utiliser comme ceci: xxx


0 commentaires

2
votes

Si votre programme pour stocker l'entrée de l'utilisateur dans un tableau de caractères (chaîne), vous pouvez utiliser la fonction STRSPN CODE> qui recherche la première occurrence d'un caractère non correspondant à une chaîne donnée.

#include <stdio.h>
#include <string.h>

int main () {
  const char user_input[] = "101th";
  const char bdigits[] = "01";

  int i = strspn (user_input, bdigits);
  printf("Not a binary digit at position %d.\n",i);
  return 0;
}


0 commentaires

0
votes

Plutôt que de prendre une entrée de caractères, puis de la tentative de convertir la chaîne résultante en une valeur numérique que vous pouvez manipuler, il suffit de demander à l'utilisateur de saisir une valeur numérique à 8 bits. Qu'il soit entré en décimal, hexadécimal ou octal, la valeur résultante est toujours stockée en mémoire en tant que valeur binaire.

Étant donné que vous souhaitez limiter l'entrée à une valeur de 8 bits, C99 introduit des types de variables exacts qui éliminent toute ambiguïté Taille de type entre les architectures. Comprendre que Char code> et non signé Char code> sont définis comme 1 octet / 8-bits sur pratiquement tous les systèmes, où des types tels que long code> peuvent être 4 -bytes sur certains systèmes (par exemple x86) et 8 octets sur d'autres (par exemple, x86_64). L'utilisation des types exacts-largeur supprime toute l'ambiguïté. P>

Les types exacts-largeur sont définis dans stdint.h code> et les macros à utiliser avec printf code> ou scanf code> est défini dans inttypes.h code> (Remarque: intttypes.h code> est requis pour inclure stdint.h code>, Donc, si vous utilisez les macros, inttypes.h code> est tout ce qui est nécessaire) Voir: homme intttypes.h p>

En nécessitant une valeur 8 bits, il est utile de saisir une variable temporaire de type plus grand (par exemple Valeur 64 bits), puis testez si la valeur entrée est comprise entre une valeur de 8 bits. Une vérification conditionnelle simple que le non signé code> est 0-255 code> ou un signé la valeur code> est -128 à 127 code> est suffisant. Si la valeur entrée n'est pas avec ces gammes pour des types non signés / signés, il n'est pas une valeur de 8 bits. P>

Après avoir lu l'entrée de l'utilisateur et la validation de la conversion et que la valeur est comprise entre 8. -bit, vous pouvez émettre la valeur dans n'importe quelle base que vous aimez à l'aide des macros fournies dans inttypes.h code> pour des types non signés et hexadécimaux, ainsi qu'une fonction simple pour produire une représentation binaire rembourrée. P> Mettre tout cela possible, vous pouvez faire quelque chose comme ce qui suit: p> xxx pré>

Exemple Utilisation / sortie forte> p> xxx Pré>

Si l'utilisateur tente de saisir quelque chose en dehors de la plage de valeur 8 bits: P>

$ ./bin/8bitentry_string
enter an 8-bit binary no.: 10131
warning: conversion ended at invalid char '3'
unsigned: 5
hex     : 5


0 commentaires