La conversion de chaîne C de représentation binaire
En C ANSI, comment faire pour convertir une chaîne en un tableau d'octets binaires?
Toutes les recherches sur google et la recherche me donne des réponses pour le C++ et les autres et non pas C.
Une idée que j'avais était de convertir la chaîne de caractères en ASCII puis convertir chaque valeur ASCII en binaire. (Duh!) Je sais que c'est la chose la plus stupide des idées mais je ne suis pas sûr de toute autre option.
J'ai entendu abt la fonction d'encodage en Java. Je ne sais pas si cela répond à un même but et peut être adopté à C.
string = "Hello"
bytearr[] = 10100101... some byte array..
Ce serait génial si quelqu'un peut jeter un peu de lumière sur cette.
Merci!
Qu'entendez-vous par "tableau d'octets binaires" ? Une "Chaîne" C est tout simplement une partie de la mémoire (un tableau) contenant des valeurs (octets) obtenir mappé en caractères ASCII.
Quelque chose de semblable au tableau d'octets en Java. Où u peut processus de la chaîne également sous la forme d'un tableau d'octets.
Vous semblez être très confus au sujet de la terminologie. Une chaîne de caractères en C déjà un tableau d'octets binaires, plus ou moins, par définition. Et c'est sans doute aussi déjà ASCII (sauf si c'est un autre encodage Unicode qui prend en charge les caractères en dehors de U+0000 à U+007F). Donc, s'il vous plaît essayer à nouveau d'expliquer ce que vous voulez que le contenu de ce "bytearr" de l'être.
Quelque chose de semblable au tableau d'octets en Java. Où u peut processus de la chaîne également sous la forme d'un tableau d'octets.
Vous semblez être très confus au sujet de la terminologie. Une chaîne de caractères en C déjà un tableau d'octets binaires, plus ou moins, par définition. Et c'est sans doute aussi déjà ASCII (sauf si c'est un autre encodage Unicode qui prend en charge les caractères en dehors de U+0000 à U+007F). Donc, s'il vous plaît essayer à nouveau d'expliquer ce que vous voulez que le contenu de ce "bytearr" de l'être.
OriginalL'auteur Maverickgugu | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
Ou avez-vous dire comment convertir une chaîne C de représentation binaire?
Voici une solution qui peut convertir des chaînes en représentation binaire. Il peut être facilement modifié pour enregistrer les chaînes binaires dans un tableau de chaînes de caractères.
Exemple d'entrée & sortie:
./ascii2bin hello
OriginalL'auteur Athabaska Dick
Il n'y a pas toutes les chaînes de caractères en C. Toute chaîne de caractères EST un tableau d'octets.
Il fixe pour vous
OriginalL'auteur Jurlie
Une chaîne est un tableau d'octets.
Si vous voulez affichage la valeur ASCII de chaque caractère en hexadécimal formulaire, il vous suffit de faire quelque chose comme:
OriginalL'auteur John Bode
Sur la plupart des systèmes, j'ai travaillé sur, la largeur de
char
est de 1 octet et donc unchar[]
ouchar*
est un tableau d'octets.Dans la plupart des autres langages tels que Java, le type de données chaîne prend soin de s'occuper de, à un certain degré, des concepts comme l'encodage, en utilisant un encodage comme, disons, l'UTF-8. En C, ce n'est pas le cas. Si je devais lire une chaîne UTF-8 dont le contenu multi-octets valeurs, mes personnages sont représentés par deux seaux dans le tableau (ou plus).
De le regarder d'un autre point de vue, considérer que tous les types de C ont une largeur fixe pour votre système (même s'ils peuvent varier entre les implémentations).
De sorte que la chaîne que vous êtes d'exploitation sur est un tableau d'octets.
Prochaine question, je suppose ensuite est de savoir comment vous afficher ces octets? C'est assez simple:
Je ne peux pas penser à une raison pourquoi vous voulez convertir la sortie binaire, mais il pourrait être fait si vous étiez à l'esprit.
char
est de 1 byte", mais il mérite sans doute d'être dit encore dans ce contexte:sizeof(char)==1
PAR DÉFINITION. Il ne sera jamais rien d'autre. (Toutefois, la valeur deCHAR_BIT
n'est pas nécessairement 8.)OriginalL'auteur
Si vous voulez juste pour itérer (ou au hasard d'accès) les octets de valeurs numériques, vous n'avez pas à faire toute la conversion, parce que C chaînes de caractères sont des tableaux déjà:
Si vous n'êtes pas prudent avec ce genre de code, cependant, vous courez le risque d'être dans un monde de souffrance lorsque vous avez besoin de l'appui des caractères non-ASCII.
OriginalL'auteur zwol
Depuis printf est lent lors de la conversion d'un immense tableau binaire. Voici une autre méthode qui n'utilise pas de printf:
Pour convertir une chaîne hexadécimale d'un tableau d'octets, vous devez effectuer les opérations suivantes:
Source est un pointeur vers un char tableau qui contient une chaîne hexadécimale.
La cible est un pointeur vers un char tableau qui contiendra le tableau d'octets.
Pour convertir un tableau d'octets en une chaîne hexadécimale de vous à la suivante:
Cible est un pointeur vers un char tableau qui contient une chaîne hexadécimale.
La Source est un pointeur vers un char tableau qui contiendra le tableau d'octets.
Voici quelques macros manquants:
OriginalL'auteur Nathan Moinvaziri