7
votes

C ++ Convertir Int et String en Char *

C'est un peu difficile, je ne peux pas comprendre.

J'ai une intensive et une chaîne que j'ai besoin de le stocker comme un char *, l'INT doit être en heex p>

IE P>

1F      a number


1 commentaires

Remarque: je n'ai pas besoin de l'imprimer dans ce format. Je peux le faire. J'ai une fonction qui prend un char * comme paramètre. J'ai besoin de le convertir afin que je puisse l'utiliser pour cette fonction


5 Réponses :


20
votes

avec approprié inclut: xxx

quelque chose comme ceci: xxx

copier le résultat de: xxx

Notez que le résultat de c_str est un code temporaire (!) const char * donc si votre fonction prend char * Vous devrez allouer une copie mutable quelque part. (Peut-être le copier à un std :: vecteur .)


0 commentaires

2
votes
#include <stdio.h>

char display_string[200];
sprintf(display_string,"%X\t%s",a,str.c_str());
I've used sprintf to format your number as a hexadecimal.

10 commentaires

Les exigences devaient séparer par un onglet, pas un espace.


Je ne pense pas que cela justifie un bowtvote puisque la partie la plus difficile n'incluait pas un onglet: - /


1) Sprintf_s n'est pas standard - 2) C'est le moyen de le faire


Eh bien, l'OP veut utiliser un char * , donc sprintf n'est pas donc injustifié!


Jacob a mis à jour la réponse à utiliser sprintf . Et depuis lors, utilisait des fonctions de bibliothèque C illégales dans le code C ++?


@ Kristo: Je suis d'accord, surtout que je trouve encore que je trouve le formatage en utilisant des iostreams pour être beaucoup plus douloureux de lire (ou même d'aller bien en premier lieu). Cependant, je pense qu'utiliser snaprintf () doit être pris en compte sur sprintf () .


Oui, utiliser c fonctions en C ++ est souvent beaucoup plus facile. Peu importe que sa "bonne pratique" ou non ... Peu importe ce que cela signifie.


La prochaine fois, dites à chacun de ne pas utiliser "const" dans les paramètres Fonction, car "c'est plus facile" et "ce n'est pas illégal". Les gens comme vous êtes une vraie douleur à ce sujet. Chaque jour je lis de tels bêtises ici. Ne laissez-vous pas seul les experts, au lieu d'ajouter du bruit à ce site?


-1 pour le tampon de longueur 200. C'est de soit trop gros (si nous prenons le str donné dans la question), ou pas assez gros (si str est inconnu longueur).


Je m'attendrais à ce que l'OP ajuste la longueur de la mémoire tampon à ses propres besoins. Ou le calculer de manière dynamique - ce qui est probablement trop exclu.



4
votes

Essayez ceci:

int myInt = 31;
const char* myString = "a number";
std::string stdString = "a number";

char myString[100];

// from const char*
sprintf(myString, "%x\t%s", myInt, myString);

// from std::string   :)
sprintf(myString, "%x\t%s", myInt, stdString.c_str());


2 commentaires

Commencez par un std :: string , pas un const char * .


Tout compilateur C ++ moderne qui permet de connecter au C-Runtime compilera ce code (le code de Jacob est centré sur Windows mais fonctionne toujours sur cette plate-forme). J'ai personnellement toujours détesté les << opérateurs surchargés dans les bibliothèques d'E / S C ++, mais je suppose que chacun le sienne.



1
votes

str.c_str () retournera une chaîne C Null terminée.

Remarque: ne répondant pas à la question principale puisque votre commentaire a indiqué que ce n'était pas nécessaire.


0 commentaires

0
votes

ceux qui écrivent "const char * mystring =" un nombre ";" sont juste des programmeurs moche. Être capable d'obtenir les bases C - ils se précipitent dans C ++ et commencent à parler de ce qu'ils ne comprennent tout simplement pas.

Le type "const char *" est un pointeur. "Un numéro" - est une matrice. Vous mélangez des pointeurs et des tableaux. Oui, les compilateurs C ++ permettent parfois de taper des conduits. Mais vous devez également comprendre - si vous tapez sur des conduits ne comprenant pas l'endroit où votre programme est - tout votre programme n'est qu'un ruban adhésif.


0 commentaires