- gban: Ingyen kellene, de tegnapra
- bitpork: MOD Júni 28- Augusztus 2- szombat jelen állás szerint.
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- ricshard444: Fényképező ? Telefon helyett
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- eBay-es kütyük kis pénzért
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- laskr99: Újrakezdem a processzor és videókártya szilícium magok fotózását
-
LOGOUT
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:
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
- Bambu Lab 3D nyomtatók
- Feljutott a G96 a Moto széria csúcsára
- A fociról könnyedén, egy baráti társaságban
- Villanyszerelés
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- gban: Ingyen kellene, de tegnapra
- Lightyear - befektetési app
- Nagyrobogósok baráti topikja
- Szeged és környéke adok-veszek-beszélgetek
- Metal topik
- További aktív témák...
- új bontatlan Apple Watch Series SE 2.gen GPS 40mm csillagfény alumíniumtok Apple
- új bontatlan Apple Watch Series 10 GPS 46mm kozmoszfekete alumíniumtok fekete Apple
- JBL Bar 800 Pro 5.1.2 Hangprojektor
- új bontatlan Apple Watch Ultra 2 GPS + Cellular 49 mm-es titántok 1 év garancia
- újszerű MacBook Air M1 256GB SSD space gray asztroszürke Apple magyar 2 év garancia ajándék
- BESZÁMÍTÁS! 1TB Samsung 980 NVMe SSD meghajtó garanciával hibátlan működéssel
- Bomba Ár! Lenovo ThinkPad L14 - Ryzen 5 I 16GB I 256SSD I 14" FHD Touch I HDMI I Cam I W11 I Gari!
- ÁRCSÖKKENTÉS TP-Link Archer C1200 Router eladó (1200 Mb/s Wi-Fi)
- AKCIÓ! MSI B550 R7 5700X 32GB DDR4 512GB SSD RTX 3060Ti 8GB Rampage SHIVA MSI 650W
- Motorola E40 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest