Як перетворити поплавок на char *?


11

Задали це запитання на електротехнічній стекові біржі та було направлено тут:

Досить пояснюючи себе; як би я пішов про перетворення float в char *? У мене є код, в якому «опір» поплавця постійно оновлюється. Я хотів би мати можливість оновити змінну 'результат', щоб прийняти значення 'опір'. Ось декілька кодів, якщо він допомагає:

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

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

Спасибі за вашу допомогу!

Відповіді:


15

Існує функція в стандартній бібліотеці Arduino під назвою dtostrf(). Я вважаю це як "Десятковий до струнного поплавця". Ви переходите в поплавок, якою шириною ви хочете, щоб було ціле число (якщо воно підійде), кількість десятків точності - і буфер, який ви хочете, щоб він заповнився.

Зауважте, що! Вам потрібно надати буфер, і вам потрібно бути обережними, щоб забезпечити більше, ніж достатньо! Не забудьте також додати 1 (щоб в кінці зберегти символ NUL):

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

Це дасть resultзначення , як " 1.23"і " -1.23"і "123456789"(без лапок). Зауважте останній приклад - він не скоротить число, якщо воно занадто велике, а 10- символьний result(не забудьте остаточний NUL) просто переповнив ваш буфер ...

Між іншим, якщо ви вкажете негативну ширину, відповідь не буде правильним виправданням, а виправдає її ліворуч (поставте будь-які пробіли в кінці замість початку).


Чудово зробив трюк! Дуже дякую, сер :)
higgsboson,

-2

В основному ви намагаєтеся перетворити 4-байтну змінну (float) в 4-байтну рядок (char змінні розміром 1 байт). Більше інформації про типи даних Arduino тут http://playground.arduino.cc/Code/DatatypePractices

Ви можете спробувати відповіді на ці запитання /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Я визнаю, що мене бентежить використання const char * result = "";у вашому прикладі.

Ключове слово "const" робить змінну "лише для читання", і тому ви не можете її змінювати. https://www.arduino.cc/en/Reference/Const

Редагувати: На жаль, зараз у мене немає пристрою Arduino для перевірки вищезазначених рішень


1
constКлючове слово ніяк НЕ робить змінну тільки для читання. Змінна тут - покажчик, і вона не повинна бути постійною. constКлючове слово має право на дані, вказують на , а не саме покажчик. Іншими словами, вам не дозволяється змінювати рядок через цей покажчик. Якщо ви хочете постійний вказівник, оголосіть його як char * const result(або const char * const resultякщо ви хочете constвказівник на constдані).
Едгар Бонет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.