Hirdetés
- Derült égből villámcsapás: vége a Ford elektromos kalandjának
- Januártól igényelhető a kiskorúak tartalomvédelme a mobilszolgáltatóknál
- Korai iOS árulkodik arról, milyen eszközök várhatók az Apple-től a közeljövőben
- Névlegesen nyer üzemidőcsatát a Honor új szériája
- Decembertől kapható itthon a Baseus Inspire szériája
- Yettel topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Xiaomi 14T Pro - teljes a család?
- Névlegesen nyer üzemidőcsatát a Honor új szériája
- iPhone topik
- Mobil flották
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Samsung Galaxy S25 FE - fenséges, felejthető vagy felesleges?
- Poco F7 – bajnokesélyes
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Janos250
őstag
A múltkori késő esti string és String kínlódásom után úgy döntöttem, hogy nincs értelme a brute force módszernek, inkább gondoljuk át logikusan. És tényleg! Ideírom a tapasztalataim, hátha valaha valakinek hasznos lesz a jövőben.
Kösz mindenkinek, aki segített!
Arduino String (nagybetűs), és a C++ string (kisbetűs) kapcsolata.
Az Arduino String nem írható be paraméterként olyan helyre, ahol C++ string az elvárás, és ez fordítva is igaz.
A kettő közötti átmenetet a .c_str() tagfüggvény teszi lehetővé.String ArduinoString_Hello = "Hello";
string Cpp_string_World = "World";
EzekkelString ArduinoString_Hello02 = Cpp_string_World.c_str();
String ArduinoString_Hello03 (Cpp_string_World.c_str());
string Cpp_string_World02 = ArduinoString_Hello.c_str();
string Cpp_string_World03 (ArduinoString_Hello.c_str());
Így új példányok jönnek létre.A szöveget mind a String, mind a string belül egy 0x0 terminált karakter tömbben tárolja, és a .c_str() konstans pointer mutat rá, ezért ha (char*) C típusú sztinget akarunk, akkor "const" miatt (char*) átdefiniálás szükséges.
Például:char* ArduinoString_Hello_c_str = (char*)ArduinoString_Hello.c_str() ;
char* Cpp_string_World_c_str = (char*)Cpp_string_World.c_str() ;
Ebben az esetben nem jön létre új példány, hanem a char* típusú karaktertömb pointere is az eredeti objektumban tárolt karaktertömb kezdetére mutat. Ha az egyikben megváltoztatjuk valamelyik karaktert, a másikban is megváltozik.Az ESP32-höz használt fordító ismeri az iterátor típust is. A C++ string rendelkezik .begin(), .end() iterátorral.
for ( std::string::iterator it=Cpp_string_World.begin(); it!=Cpp_string_World.end(); ++it)
std::cout << *it;
std::cout << '\n';
/*
Woyld
*/std::string::iterator it=Cpp_string_World.begin();
std::cout << "Cpp_string_World.begin() = :" << *it<< "\n"; // W
it=Cpp_string_World.end()-1; // mert a .end() a 0x0 terminátorra mutat
std::cout << "Cpp_string_World.end() = :" << *it<< "\n"; // dMintának egy teljes program:
#define __cplusplus 201103L
#include <iostream>
using namespace std;
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("Arduino String (nagybetus), es a C++ string (kisbetus) kapcsolata.");
String ArduinoString_Hello = "Hello";
string Cpp_string_World = "World";
String ArduinoString_Hello02 = Cpp_string_World.c_str();
String ArduinoString_Hello03 (Cpp_string_World.c_str());
Serial.printf("ArduinoString_Hello :%s\n",ArduinoString_Hello);
Serial.printf("ArduinoString_Hello02 :%s\n",ArduinoString_Hello02);
Serial.printf("ArduinoString_Hello03 :%s\n",ArduinoString_Hello03);
Serial.printf("ArduinoString_Hello[0]:%c\n",ArduinoString_Hello[0]);
Serial.printf("ArduinoString_Hello.c_str()[0]:%c\n\n",ArduinoString_Hello.c_str()[0]);
/*
ArduinoString_Hello :Hello
ArduinoString_Hello02 :World
ArduinoString_Hello03 :World
ArduinoString_Hello[0]:H
ArduinoString_Hello.c_str()[0]:H
*/
string Cpp_string_World02 = ArduinoString_Hello.c_str();
string Cpp_string_World03(ArduinoString_Hello.c_str());
std::cout << "Cpp_string_World :" << Cpp_string_World<< "\n";
std::cout << "Cpp_string_World02 :" << Cpp_string_World02 << "\n";
std::cout << "Cpp_string_World03 :" << Cpp_string_World03 << "\n";
/*
Cpp_string_World :World
Cpp_string_World02 :Hello
Cpp_string_World03 :Hello
*/
char* ArduinoString_Hello_c_str = (char*)ArduinoString_Hello.c_str() ;
char* Cpp_string_World_c_str = (char*)Cpp_string_World.c_str() ;
ArduinoString_Hello_c_str[2] = 'x';
Cpp_string_World[2]= 'y';
Serial.printf("ArduinoString_Hello is atirodik :%s\n",ArduinoString_Hello);
std::cout << "Cpp_string_World_c_str is atirodik :" << Cpp_string_World << "\n";
/*
ArduinoString_Hello is atirodik :Hexlo
Cpp_string_World_c_str is atirodik :Woyld
*/
// iterator:
std::cout << "Iterator:\n";
for ( std::string::iterator it=Cpp_string_World.begin(); it!=Cpp_string_World.end(); ++it)
std::cout << *it;
std::cout << '\n';
/*
Woyld
*/
std::string::iterator it=Cpp_string_World.begin();
std::cout << "Cpp_string_World.begin() = :" << *it<< "\n"; // W
it=Cpp_string_World.end()-1; // mert a .end() a 0x0 terminátorra mutat
std::cout << "Cpp_string_World.end() = :" << *it<< "\n"; // d
} ;
void loop() {} ;
Új hozzászólás Aktív témák
- Garmin Venu 3 fehér (homokkő)
- ÚJ bontatlan S9 41mm Midnight / éjfekete Cellular Azonnal átvehető Deák térnél
- ÚJ BONTATLAN Apple Watch Series S9 41mm Pink és Mid Azonnal Átvehető DEÁK TÉRNÉL 1 Év Apple Garancia
- BONTATLAN Új iPhone 17 PRO Kozmosznarancs 256-512GGB Független 1év Apple Gar. Azonnal átvehető.Deák
- BONTATLAN Új Ipad 9th 10th 11 gen. Air 6 7 , Ipad Pro Mini 7 IPADEK Azonnal DEÁK Térnél Átvehető.
- Samsung Galaxy S23 Ultra Green 120 Hz Dynamic AMOLED 2X, 200 MP kamera, beépített S Pen
- Apple iPhone 14 Pro Max / Kártyafüggetlen / 256GB / 12Hó Garancia / 87% akku
- Fotó állvány eladó
- BESZÁMÍTÁS! Asus B450M R5 5500 16GB DDR4 512GB SSD RTX 2070 Super 8GB Zalman Z1 Plus Kolink 850W
- Xiaomi Redmi 14C 256GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

ekkold

