Làm cách nào để chuyển đổi một float thành char *?


11

Đã hỏi câu hỏi này về Trao đổi ngăn xếp kỹ thuật điện và được hướng dẫn tại đây:

Khá tự giải thích; Làm thế nào tôi có thể chuyển đổi một float thành char *? Tôi có mã trong đó 'sức đề kháng' liên tục được cập nhật. Tôi muốn có thể cập nhật biến 'kết quả' để lấy giá trị của 'kháng'. Đây là một số mã, trong trường hợp nó giúp:

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

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

Cảm ơn bạn đã giúp đỡ!

Câu trả lời:


15

Có một chức năng trong thư viện Arduino tiêu chuẩn được gọi là dtostrf(). Tôi nghĩ về nó như là "Số thập phân cho chuỗi nổi". Bạn vượt qua trong float, bạn muốn toàn bộ số bao nhiêu (nếu nó phù hợp), số thập phân của độ chính xác - và bộ đệm bạn muốn nó điền vào.

Lưu ý rằng! Bạn cần cung cấp bộ đệm, và bạn cần cẩn thận để cung cấp quá đủ! Đừng quên thêm 1 (để lưu ký tự NUL ở cuối):

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

Điều này sẽ đưa ra resultcác giá trị như " 1.23"" -1.23""123456789"(không có dấu ngoặc kép). Lưu ý ví dụ cuối cùng - nó sẽ không cắt bớt số nếu nó quá lớn và 10 ký tự đó result(đừng quên cuối cùng NUL) chỉ tràn bộ đệm của bạn ...

Ngẫu nhiên, nếu bạn chỉ định chiều rộng âm, nó sẽ không chứng minh đúng câu trả lời, nó sẽ chỉ trái với nó (đặt bất kỳ khoảng trắng nào ở cuối thay vì bắt đầu).


Đã làm thủ thuật độc đáo! Cảm ơn bạn rất nhiều thưa ngài :)
higgsboson

-2

Về cơ bản, bạn đang cố gắng chuyển đổi biến 4 byte (float) thành chuỗi 4 byte (biến char có kích thước 1 byte). Thông tin thêm về các loại dữ liệu Arduino tại đây http://playground.arduino.cc/Code/DatatypePractices

Bạn có thể thử câu trả lời cho những câu hỏi này /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

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

Tôi thừa nhận rằng tôi bối rối khi sử dụng const char * result = "";trong ví dụ của bạn.

Từ khóa "const" làm cho biến là "chỉ đọc" và do đó bạn không thể sửa đổi nó. https://www.arduino.cc/en/Reference/Const

Chỉnh sửa: Thật không may, tôi không có thiết bị Arduino ngay bây giờ để tự kiểm tra các giải pháp trên


1
Các consttừ khóa nào không làm biến read-only. Biến ở đây là một con trỏ và nó không cần phải là hằng số. Các consttừ khóa đủ điều kiện dữ liệu được chỉ ra , không phải là con trỏ chính nó. Nói cách khác, bạn không được phép sửa đổi chuỗi thông qua con trỏ đó. Nếu bạn muốn một con trỏ không đổi, hãy khai báo nó là char * const result(hoặc const char * const resultnếu bạn muốn một constcon trỏ tới constdữ liệu).
Edgar Bonet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.