Chuyển đổi int hoặc String thành mảng char trên Arduino


81

Tôi đang nhận giá trị int từ một trong các chân tương tự trên Arduino của mình. Làm cách nào để nối giá trị này với a Stringvà sau đó chuyển đổi Stringthành a char[]?

Người ta đề nghị tôi thử char msg[] = myString.getChars();, nhưng tôi nhận được một thông báo getCharskhông tồn tại.


7
Bạn có thực sự cần một mảng có thể sửa đổi? Nếu không, bạn có thể sử dụng const char * msg = myString.c_str();. Không giống như toCharArray(), c_str()là một hoạt động không sao chép và không sao chép là một điều tốt trên các thiết bị hạn chế bộ nhớ.
Edgar Bonet

@EdgarBonet Nó hoạt động, nhưng chỉ cho một chuỗi tại một thời điểm. C_str () cuối cùng ghi đè lên cũ hơn.
mmv-ru

Câu trả lời:


134
  1. Để chuyển đổi và nối một số nguyên, hãy sử dụng toán tử + = (hoặc hàm thành viên concat):

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. Để lấy chuỗi làm kiểu char[], hãy sử dụng toCharArray () :

    char charBuf[50];
    stringOne.toCharArray(charBuf, 50)
    

Trong ví dụ, chỉ có khoảng trống cho 49 ký tự (giả sử nó được kết thúc bằng null). Bạn có thể muốn làm cho kích thước động.

Trên không

Chi phí mang vào String(nó không được bao gồm nếu không được sử dụng ở bất kỳ đâu trong bản phác thảo), là khoảng 1212 byte bộ nhớ chương trình (flash) và 48 byte RAM.

Điều này được đo bằng Arduino IDE phiên bản 1.8.10 (2019-09-13) cho bản phác thảo Arduino Leonardo .


13
Đã tiết kiệm cho tôi rất nhiều thời gian mày mò. Cảm ơn! Để làm cho char [] kích thước động, làm một cái gì đó giống nhưchar charBuf[stringOne.length()+1]
loeschg

9
Tôi đã thực hiện nó một cách linh hoạt như thế này: char ssid[ssidString.length()]; ssidString.toCharArray(ssid, ssidString.length());
dreadledad 14/12/12

1
@loeschg Cảm ơn, tôi đã thử +1lúc đầu mà không có giải pháp nào, nhưng giải pháp của bạn hiệu quả với tôi!
Nhà triết học sai lầm vào


1
Câu trả lời rất hay! Cộng với một!
Damián Rafael Lattenero

57

Đây là ví dụ về cách chuyển đổi giữa Stringchar[]với độ dài động -

// Define 
String str = "This is my string"; 

// Length (with one extra character for the null terminator)
int str_len = str.length() + 1; 

// Prepare the character array (the buffer) 
char char_array[str_len];

// Copy it over 
str.toCharArray(char_array, str_len);

Vâng, điều này thật khó hiểu đối với một thứ đơn giản như chuyển đổi kiểu, nhưng thật đáng buồn đó là cách dễ nhất.


14

Bạn có thể chuyển đổi nó thành char * nếu bạn không cần một chuỗi có thể sửa đổi bằng cách sử dụng:

(char*) yourString.c_str();

Điều này sẽ rất hữu ích khi bạn muốn xuất bản một biến Chuỗi qua MQTT trong arduino.


1

Không có thứ nào trong số đó hoạt động. Đây là một cách đơn giản hơn nhiều .. nhãn str là con trỏ tới mảng LÀ gì ...

String str = String(yourNumber, DEC); // Obviously .. get your int or byte into the string

str = str + '\r' + '\n'; // Add the required carriage return, optional line feed

byte str_len = str.length();

// Get the length of the whole lot .. C will kindly
// place a null at the end of the string which makes
// it by default an array[].
// The [0] element is the highest digit... so we
// have a separate place counter for the array...

byte arrayPointer = 0;

while (str_len)
{
    // I was outputting the digits to the TX buffer

    if ((UCSR0A & (1<<UDRE0))) // Is the TX buffer empty?
    {
        UDR0 = str[arrayPointer];
        --str_len;
        ++arrayPointer;
    }
}

strkhông phải là con trỏ tới một mảng, nó là một Stringđối tượng triển []khai toán tử.
gre_gor
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.