A única maneira que sei é:
#include <sstream>
#include <string.h>
using namespace std;
int main() {
int number=33;
stringstream strs;
strs << number;
string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
}
Mas existe algum método com menos digitação?
c++
integer
const-char
rsk82
fonte
fonte
Respostas:
Em C ++ 17, use
std::to_chars
como:Em C ++ 11, use
std::to_string
como:E em C ++ 03, o que você está fazendo é ótimo, exceto usar
const
como:fonte
std::string
por padrão, em vez dechar*
.std::string
está disponível por padrão, a menos que seja explicitamente especificado na própria pergunta. Faz sentido? Além disso, como a própria pergunta usastd::string
(estd::stringstream
), você não tem muitos motivos para discordar dela.Acho que você pode usar um sprintf:
fonte
-2147483647
.(((sizeof number) * CHAR_BIT) + 2)/3 + 2
parece magia ...Você pode usar impulso
fonte
A solução de estilo C pode ser usada
itoa
, mas a melhor maneira é imprimir esse número em uma string usandosprintf
/snprintf
. Verifique esta questão: Como converter um número inteiro em uma string de forma portátil?Observe que a
itoa
função não é definida em ANSI-C e não faz parte do C ++, mas é compatível com alguns compiladores. É uma função fora do padrão, portanto, você deve evitar usá-la. Verifique esta questão também: Alternativa para itoa () para converter inteiros em strings C ++?Observe também que escrever código no estilo C durante a programação em C ++ é considerado uma prática ruim e, às vezes, referido como "estilo horrível". Você realmente deseja convertê-lo em
char*
string estilo C ? :)fonte
Eu não descartaria o const na última linha, pois ele existe por um motivo. Se você não consegue viver com um const char *, é melhor copiar a matriz char como:
fonte
const char* char_type = temp_str.c_str();
é melhor?std::vector<char> temp_vec(temp_str.begin(), temp_str.end()); temp_vec.push_back(0); char *char_type = &vec[0];
. Isso fornece memória mutável, embora, é claro, você ainda precise manter o vetor vivo pelo tempo que quiser usar o ponteiro.string
e não se preocupe com o velho, simples, estúpidochar *
do velho, puro C. <bits de chama pretendidos>char*
, não "há algum ponto em chamar de C ++ para bibliotecas existentes escritas em C, ou devo reimplementá-las em C ++?" ;-pTudo bem ... primeiro eu precisava de algo que fizesse o que esta pergunta está pedindo, mas eu precisava RAPIDAMENTE! Infelizmente, a maneira "melhor" é quase 600 linhas de código !!! Perdoe o nome disso que não tem nada a ver com o que está fazendo. O nome próprio era Integer64ToCharArray (valor int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Sinta-se à vontade para tentar limpar esse código sem prejudicar o desempenho.
Entrada: qualquer valor com sinal de 64 bits do intervalo mínimo ao máximo.
Exemplo:
Resultado:
Testes de velocidade originais: ( Integer64ToCharArray (); )
Melhor caso, valor de 1 dígito.
Pior caso, valor de 20 dígitos.
Novos testes de velocidade de design: ( AddDynamicallyToBuffer (); )
Melhor caso, valor de 1 dígito.
Pior caso de 32 bits - valor de 11 dígitos.
Pior caso negativo de 1 trilhão - valor de 14 dígitos.
Pior caso de 64 bits - valor de 20 dígitos.
Como funciona!
Executamos uma técnica de divisão e conquista e, uma vez que definimos o comprimento máximo da string, simplesmente definimos cada valor de caractere individualmente. Conforme mostrado nos testes de velocidade acima, os comprimentos maiores obtêm grandes penalidades de desempenho, mas ainda é muito mais rápido do que o método de loop original e nenhum código realmente mudou entre os dois métodos, exceto o looping não está mais em uso.
Em meu uso, daí o nome, eu retorno o deslocamento e não edito um buffer de matrizes de caracteres, em vez disso, começo a atualizar os dados de vértice e a função tem um parâmetro adicional para deslocamento, portanto, não é inicializada como -1.
fonte
Veja esta resposta https://stackoverflow.com/a/23010605/2760919
Para seu caso, apenas altere o tipo em snprintf de long ("% ld") para int ("% n").
fonte
Isso pode ser um pouco tarde, mas eu também tive o mesmo problema. A conversão para char foi tratada em C ++ 17 com a biblioteca "charconv".
https://en.cppreference.com/w/cpp/utility/to_chars
fonte
Você também pode usar o elenco.
exemplo:
fonte