Convertit une Chaîne Binaire en C
im essayant de convertir la chaîne binaire en C. Cette fonction doit retourner une chaîne de caractères(char *) comme "010010101" etc. Aussi je veux imprimer que ce qui est retournée. Je ne peux pas être sûr à propos de ce code
FONCTION
char* stringToBinary(char* s)
{
if(s == NULL) return 0; /* no input string */
char *binary = malloc(sizeof(s)*8);
strcpy(binary,"");
char *ptr = s;
int i;
for(; *ptr != 0; ++ptr)
{
/* perform bitwise AND for every bit of the character */
for(i = 7; i >= 0; --i){
(*ptr & 1 << i) ? strcat(binary,"1") : strcat(binary,"0");
}
}
return binary;
}
malloc(sizeof(s)*8);
jamais la confiance de l'utilisateur (l'appelant).- Pourquoi êtes-vous allouer de l'espace pour 8 pointeurs?
- Chaque char a 8 bouchées, si j'ai une chaîne qui comprennent 10 lettres, cela signifie 10*8? N'est-il pas?
strcpy(binary,"")
peut être simplifié à*binary = '\0'
.s
est un pointeur verschar
.sizeof s
est de la taille d'unchar *
(probablement 4 ou 8 octets).- C techniquement ne nécessite pas d'octets pour n'avoir que 8 bits. Ils pourraient avoir de plus en plus (il y a un
CHAR_BIT
constante dans<limits.h>
IIRC). - Je l'ai changé pour sizeof(s). Merci
- À l'aide de
?:
dans le contexte vide est une abomination. Soit vous voulezif
/else
ou si vous souhaitez facteur de la chose:strcat(binary, (*ptr & 1 << i) ? "1" : "0");
- Seuls les caractères ASCII 8 bits, vous devriez vraiment utiliser l'UTF8 . Dans le monde Unix, presque tout ce que suppose l'UTF8. Bonne lecture: utf8everywhere.org
- Quoi? ASCII 7 bits.
- Avez-vous une question?
- Allez, vraiment? Comment avez-vous allouer 7 bits? Aussi, ASCII étendu a été autour depuis des décennies.
- extended" n'est pas une chose. Il existe plusieurs extensions de l'ASCII (UTF-8), qui sont mutuellement incompatibles. Tout ce qui n'est pas pertinent parce que le C n'a pas de spécifier ASCII de toute façon.
- Double Possible de Imprimer un int en représentation binaire à l'aide de C
- Attendez, est-ce censé retourner l'ascii représentation binaire de la chaîne?
- Double Possible de la Conversion de Char Binaire en C
Vous devez vous connecter pour publier un commentaire.
Sans aucune des hypothèses à propos de l'entrée, juste l'impression de les bits dans les octets:
Votre code semble être la plupart du temps très bien. Seulement vous sont vraiment mallocing le montant est erroné. Ici, il est avec les corrections:
Exemple s'exécute:
#include "stdlib.h" ===> #include <stdlib.h>
#include "stdio.h" ===> #include <stdio.h>
#include "string.h" ===> #include <string.h>
Je n'ai pas le compiler, mais j'espère que cela vous inspirera
Donc:
un char est de 8 bits.
xxxxxxxx
comparer chaque bit est plus facile et plus rapide avec un masque
xxxxxxxX
&
00000001
c'est vrai que si le 1er bit est à 1.
la prochaine sera
xxxxxxXx
&
00000010
strcat(bynary,"1");
:bynary
point à la table des matières ne sont pas initialisées. et la typo nom.aux++
-->aux++;
, Aussi Votre processus d'inversion des résultats.