Como converter um float em char *?

11

Esta pergunta foi feita no Electrical Engineering Stack Exchange e foi direcionada aqui:

Bastante auto-explicativo; como eu iria converter um float em um char *? Eu tenho um código no qual a 'resistência' do flutuador está sendo constantemente atualizada. Eu gostaria de poder atualizar a variável 'resultado' para obter o valor de 'resistência'. Aqui está um pouco do código, caso ajude:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

Obrigado pela ajuda!

higgsboson
fonte

Respostas:

15

Há uma função na biblioteca padrão do Arduino chamada dtostrf(). Eu penso nisso como "Decimal para String Float". Você passa no ponto flutuante, qual a largura que deseja que o número inteiro seja (se for adequado), o número de casas decimais de precisão - e o buffer que você deseja que ele preencha.

Observe que! Você precisa fornecer o buffer e precisa ter mais do que suficiente! Não se esqueça de adicionar 1 também (para armazenar o caractere NUL no final):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

Isso fornecerá resultvalores como " 1.23"e " -1.23"e "123456789"(sem as aspas). Observe o último exemplo - ele não truncará o número se for muito grande, e esse caractere de 10 caracteres result(não se esqueça do final NUL) apenas sobrecarregou seu buffer ...

Aliás, se você especificar uma largura negativa, ela não justificará a resposta corretamente, mas a esquerda (coloque espaços no final, em vez de no início).

John Burger
fonte
Fez bem o truque! Muito obrigado gentil senhor :)
Bóson de Higgs
-2

Basicamente, você está tentando converter uma variável de 4 bytes (float) em uma sequência de 4 bytes (as variáveis ​​char têm o tamanho de 1 byte). Mais informações sobre os tipos de dados do Arduino aqui http://playground.arduino.cc/Code/DatatypePractices

Você pode tentar as respostas para estas perguntas /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

/programming/24420246/c-function-to-convert-float-to-byte-array

Admito que estou confuso com o uso de const char * result = "";no seu exemplo.

A palavra-chave "const" torna a variável como "somente leitura" e, portanto, você não pode modificá-la. https://www.arduino.cc/en/Reference/Const

Edit: Infelizmente eu não tenho um dispositivo Arduino agora para me testar as soluções acima

evgi9
fonte
11
A constpalavra-chave não torna a variável somente leitura. A variável aqui é um ponteiro e não precisa ser constante. A constpalavra-chave qualifica os dados apontados , não o ponteiro em si. Em outras palavras, você não tem permissão para modificar a sequência através desse ponteiro. Se você deseja um ponteiro constante, declare-o como char * const result(ou const char * const resultse você deseja um constponteiro para constdados).
Edgar Bonet