2009-11-19 5 views
7

Questo è un po 'difficile non riesco a capirlo.C++ converte int e stringa in char *

ho un int e una stringa che ho bisogno di memorizzare come char *, int deve essere in esadecimale

cioè

int a = 31; 
string str = "a number"; 

devo mettere sia separata da una scheda in un char *.

output dovrebbe essere simile a questo:

1F  a number 
+0

Nota: non è necessario stamparlo in tale formato. Posso farlo. Ho una funzione che accetta un char * come parametro. Devo convertirlo per poterlo usare per quella funzione – user69514

+0

Gli odori come i compiti. È? – outis

risposta

20

Con appropriata include:

#include <sstream> 
#include <ostream> 
#include <iomanip> 

Qualcosa di simile a questo:

std::ostringstream oss; 
oss << std::hex << a << '\t' << str << '\n'; 

Copia il risultato da:

oss.str().c_str() 

Si noti che il risultato di c_str è un temporaneo (!) const char* quindi se la propria funzione richiede char * sarà necessario allocare una copia mutabile da qualche parte. (Forse copiarla in una std::vector<char>.)

+0

+1. Bella risposta. –

+0

solo la risposta giusta qui – KeatsPeeks

+0

questo funziona fantastico. Grazie. – user69514

2
#include <stdio.h> 

char display_string[200]; 
sprintf(display_string,"%X\t%s",a,str.c_str()); 

ho usato sprintf per formattare il numero come esadecimale.

+0

I requisiti dovevano separarsi da una tabulazione, non da uno spazio. –

+0

Non credo che garantisca un downvote dal momento che la parte più difficile non include una scheda: -/ – Jacob

+0

1) sprintf_s non è standard - 2) questo è il modo C di farlo – KeatsPeeks

4

Prova questo:

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()); 
+0

Amore per sapere perché questo ha avuto un downvote. Funziona alla grande per me –

+0

Inizia con un 'std :: string', non un' const char * '. –

+3

C di nuovo ............ – KeatsPeeks

1

str.c_str() restituirà un C-stringa con terminazione null.

Nota: non rispondere alla domanda principale poiché il tuo commento indicava che non era necessario.

0

chi scrive "const char * myString =" un numero ";" sono solo programmatori schifosi. Non essendo in grado di ottenere le basi del C, si precipitano in C++ e iniziano a parlare delle cose che semplicemente non capiscono.

Il tipo "const char *" è un puntatore. "un numero" - è una matrice. Mescoli puntatori e matrici. Sì, i compilatori C++ a volte consentono la digitazione di canali. Ma devi anche capire - se fai la dattilografia non capendo dov'è la tua "duttività" - tutto il tuo programma è solo un nastro adesivo.