19.04.2026

Qiymat turlari. O’zgaruvchilar. Struktura

QIYMAT TURLARI

Qiymat turi – dasturlarda qo’llaniladigan qiymatlarning o’zgarish oralig’i va qiymat qabul qilish sohasini bildiruvchi axborot.

Qiymati turidan kelib chiqib axborotning hajmi turlicha bo’lishi mumkin va u baytlarda o’lchanadi.

bayt – xotiraning dastur tomonidan uning nomi yoki manzili bo’yicha murojaat qilish mumkin bo’lgan minimal bloki hajmi.

bit – xotira elementar katagining holatini ifodalovchi axborot birligi.

1 bayt = 8 bit. Barcha raqamlar va belgilarning kodi bit birligi orqali ifodalanadi. 1 bayt xotiraga saqlash mumkin bo’lgan qiymatlarning maksimal soni 2^8=256 ga teng (0 dan 255 gacha). Har bir raqam yoki belgining hajmi 1 baytga teng. Demak, ikkilik sanoq tizimidagi 00000001 bilan 11111111 qiymatlarida ifodalangan belgining hajmi 1 bayt bo’lsa-da, ular bir-biridan farqlanadi, ularni ma’lumot uzatish tarmoqlari orqali uzatish tezligi ham keskin farq qiladi. Shuning uchun ham tarmoqlar orqali ma’lumot uzatish tezligini ifodalashda ham bayt/sekund birligidan emas, bit/sekund (bod) birligidan foydalaniladi.

2 bayt = 16 bit = 2^16 = 65 536.

4 bayt = 32 bit = 2^32 = 4 294 967 296.

Turli qiymat turlari xotiradan turlicha joy talab qilishi mumkin.

Arduinoda qo’llaniladigan qiymat turlari va ularning qo’llanish sohasi

Qiymat turining asosiy nomi, ifodalanishi
Alternativ nomi va ifodalanishi
O’lchami Qiymat oralig’i Xususiyati
boolean
bool
1 bayt 0 yoki 1, LOW yoki HIGH, false yoki true Mantiqiy o’zgaruvchilar uchun qo’llaniladi. bool 1 bayt joy talab qiladi (1 bit emas!)
char
1 bayt -128… 127 ASCII belgilar jadvalidagi belgining tartib raqamini (kodini) saqlaydi
int8_t
1 bayt -128… 127 Ishorali (musbat va manfiy) butun sonlar
byte
uint8_t
1 bayt 0… 255 Ishorasiz (faqat musbat) butun sonlar
int
int16_t, short
2 bayt -32 768… 32 767 Ishorasiz butun sonlar. ESP32/8266 larda 4 bayt!
unsigned int
uint16_t, word
2 bayt 0… 65 535 Ishorali butun sonlar. ESP32/8266 larda 4 bayt!
long
int32_t
4 bayt -2 147 483 648…    2 147 483 647 Ishorali butun sonlar
unsigned long
uint32_t
4 bayt 0… 4 294 967 295 Ishorasiz butun sonlar
float
4 bayt -3.4E+38 3.4E+38 Ishorali kasr sonlar. Aniqligi 6-7 ta belgigacha, ya’ni 100% emas!
double
4 bayt -1.7E+308.. 1.7E+308 AVR uchun float bilan bir xil. Aslida 8 baytga teng.
ESP va ayrim 32 bitli mikrokontrollerlarda 8 bayt, aniqlik 15-16 belgigacha.
int64_t
8 bayt -(2^64)/2… (2^64)/2-1 Ishorali butun sonlar
uint64_t
8 bayt 2^64-1 Ishorasiz sonlar

bool (boolean) – 0 yoki 1 qiymatini qabul qiladi, 1 dan katta qiymatni ham 1 sifatida qabul qiladi.

Har bir qiymat turining maksimal qiymati konstantalarda ham saqlanadi. Ular quyidagilar:

  • UINT8_MAX – 255
  • INT8_MAX – 127
  • UINT16_MAX – 65 535
  • INT16_MAX – 32 767
  • UINT32_MAX – 4 294 967 295
  • INT32_MAX – 2 147 483 647
  • UINT64_MAX – 18 446 744 073 709 551 615
  • INT64_MAX – ‭9 223 372 036 854 775 807

Konstantalardan foydalanish, o’zgaruvchiga o’zlashtirish xuddi oddiy qiymatdagidek amalga oshiriladi: int led_maks = UINT_MAX; (int led_maks = 255; bilan bir xil)
unsigned long taymer_maks = UINT32_MAX; (unsugned long taymer_maks = 4294967295; bilan bir xil)

char – har qanday turdagi 1 ta belgini (raqam, harf, ko’rsatilmaydigan belgilar, maxsus klavishalar kodlari va boshqa maxsus belgilarni) o’zida saqlovchi qiymat turi. Bunday qiymat turiga ega bo’lgan o’zgaruvchilar qiymatning ASCII jadvalidagi kodini o’zida saqlaydi. Bunday qiymatlarni o’zlashtirishda belgining ASCII kodi ko’rsatiladi yoki belgining o’zi tirnoq (bittalik qo’shtirnoq)da matn tarzida ko’rsatilad: ‘a’, ‘2’ kabi.

ASCII jadvali

String – barcha turdagi ko’rsatiladigan qiymatlarni matn ko’rinishida o’zida birlashtiruvchi qiymat turi. Bunday qiymat turini matnli qator (bundan keyin qator) deb ham yuritiladi.

Qator, char qiymatidan farqli ravishda, bir yoki undan ortiq belgilar va raqamlarni o’z ichiga olishi mumkin. Qator qiymati odatda (ikkitalik) qo’shtirnoqqa olinadi. Agar matnda qo’shtirnoq belgisining o’zi ham ko’rsatilishi kerak bo’lsa, uni teskari slesh belgisidan keyin ko’rsatiladi (\” kabi). Masalan, String a = “abCD\”12\”#$” kabi (Yuqoridagi misolda “abCD”12″#$” matni a o’zgaruvchisiga matn ichidagi qo’shtirnoq belgisi bilan birga o’zlashtirilgan). Lekin ba’zida Arduinoda qo’shtirnoqsiz ko’rsatilgan boshqa turdagi qiymatlar ham qator sifatida o’zlashtirilishi mumkin. Masalan, String a = 1234, String b = ‘s’, String c = ‘-2.34’ kabi. Shuningdek, qatorni o’zgaruvchiga konstruktor bilan ham o’zlashtirish mumkin: String a(1234) – sonli qiymatni o’zlashtirish, String b(1234, BIN) – sonli qiymatdan razryadini (BIN, DEC, HEX) ko’rsatgan holda, String b(3.14, 1) – kasr sonning qiymatini qisqartirib (3.1 tarzida), String b(‘s’)char qiymat turidan, String c(“text”) – matndan o’zlashtirish kabi.

Bir nechta qatorni yoki qator bilan matnni “+” amali yordamida birlashtirish (qo’shish emas) mumkin. Masalan, String a = b + c – bu yerda a, b va c – qatorlar, String a = b + “abcd” – bu yerda a va b – qatorlar, “abcd” esa – matn (yoki teskari ketma-ketlikda ham bilashtirish mumkin: String a = “qwerty” + b). Biroq 2 ta matnni o’zaro qo’shib bo’lmaydi: String a = “abcd” + “qwerty” – xatolikka olib keladi. Ushbu matnlarni qo’shish uchun ulardan kamida 1 tasi qator bo’lishi kerak: String b = “abcd”; String a = b + “qwerty”.

Bir nechta matn va qatorlarni birlshtirishda ham shu qoidaga amal qilish zarur: String t = “25.7”; String h = “45 %”; String a = “Harorat: ” + t + ” C, havo namligi: ” + h;  (Natija: “Havo namligi: 25.7 C, havo namligi: 45 %” ko’rinishiga keladi).

Qatorning boshqa qiymat turlaridan afzalligi – unga har qanday boshqa qiymat turlaridagi ma’lumotlarni birlashtirish mumkin. Kamchiligi esa – u xotiradan boshqa qiymat turlariga nisbatan ko’proq joy talab qiladi. Aniqrog’i, uning xotiradan egallaydigan joyi qatordagi belgilar soniga teng bo’ladi (shuncha bayt joyni band qiladi).

Boshqa turdagi qiymatlarni qator sifatida o’zlashtirmasdan (String) amali yordamida ularni vaqtincha qator sifatida ifodalash mumkin, bunda ularning qiymat turi asl holida qoladi (o’zgarmaydi):

float t = 25.7; int h = 45; String a = “Havo harorati: ” + (String)t + ” C, havo namligi: ” + (String)h + ” %”;

Natija: a ning qiymati “Havo harorati: 25.7 C, havo namligi: 45 %” ko’rinishiga keladi.

Masalan, bunday amaldan qator bilan turlicha boshqa qiymat turlarini birlashga holda displey orqali ko’rsatishda foydalanish mumkin.

Qatorning tarkibidagi elementlarni ajratib olishda, konstruktor yordamida unga massivga murojaat qilgandek murojaat qilish mumkin:

String a(“salom!”);
a[0] = “S”;

Natija: “Salom!” ko’rinishiga keladi (1-harf bosh harfga aylandi, massivdagi 0-indeks).

char b = a[1];

Natija: b ning qiymati sifatida a matnli qatordagi “a” belgisiga o’zlashtiriladi (massivdagi 1-indeks).

Qatorlarni taqqoslash ham xuddi sonli o’zgaruvchilarni taqqoslagandek amalga oshiriladi:

String a = “salom!”;
if (a == “salom!”) {shart bajarilgandagi amallar};
if (a != “Salom!”) {shart bajarilgandagi amallar};

Qatordan Arduino qurilmasidan boshqa qurilmalarga matnli xabar yuborishda, yoki aksincha, ulardan matnli xabarni qabul qilishda ham keng qo’llaniladi.

O’ZGARUVCHILAR

O’zgaruvchi – o’z nomiga ega bo’lgan va mikrokontroller tezkor xotirasida o’z manziliga ega bo’lgan xotira katagi, u o’z o’lchamiga mos qiymatni saqlaydi. O’zgaruvchiga uning nomi (yoki boshlang’ich manzili) bo’yicha murojaat qilish, uning qiymatini o’qish va o’zgartirish mumkin. O’zgaruvchida hisoblash natijalari, datchiklardan, modullardan olingan qiymatlar va boshqa ma’lumotlar saqlanishi mumkin.

Arduinoda o’zgaruvchilar amal qilish doirasiga ko’ra global va lokal turlariga bo’linadi.

Global o’zgaruvchi – odatda sketchning boshida e’lon qilinadigan va sketchdagi barcha funksiyalarda amal qiladigan o’zgaruvchi hisoblanadi. Bu global o’zgaruvchining qulayligi bo’lsa, uning salbiy jihati – uning tezkor xotiradan doimiy joy band qilib turishi hisoblanadi. Ayniqsa, tezkor xotirasi kamroq bo’lgan plata va mikrokontrollerlarda bu hal qiluvchi ahamiyatga ega bo’ladi. Global o’zgaruvchining qiymati sketch davomida xohlagancha o’zgartirilishi (qayta o’zlashtirilishi) mumkin. Konstanta-o’zgaruvchi – bu global o’zgaruvchining yana bir turi bo’lib, uning qiymati ham butun sketch davomida amal qiladi, biroq uning qiymati faqat bir marta belgilanadi va qayta o’zgarmaydi. Shuning uchun unga odatda o’zgaruvchi sifatida qaralmaydi ham. Chunki kompilyator uning qiymatini oddiy konstanta sifatida qabul qiladi. Yana bir ahamiyati – u tezkor xotiradan umuman joy talab qilmaydi.

Lokal o’zgaruvchi – faqat ma’lum bir funksiya ichidagina amal qiladigan o’zgaruvchi turi. Tegishli funksiyadan tashqarida undan foydalanib bo’lmasa-da, u tezkor xotiradan doimiy joy band qilmaydi. Aniqrog’i, funksiya ishi yakunlanganda, lokal o’zgaruvchilar tezkor xotiradan o’chib ketadi. Bir xil nomli lokal o’zgaruvchidan turli funksiyalarda qayta-qayta foydalanish mumkin (ular bir-biri bilan konflikt qilmaydi). Lokal o’zgaruvchi o’zi amal qiladigan funksiya ichida e’lon qilinadi va uning qiymati funksiya ichida xohlagancha o’zgartirilishi (qayta o’zlashtirilishi) mumkin. Bitta funksiya doirasida bir xil nom bilan o’zgaruvchini takroran e’lon qilib bo’lmaydi, lekin unga xohlagancha qaytadan qiymat o’zlashtirish mumkin.

O’zgaruvchini e’lon qilish, unga qiymat o’zlashtirish va undan foydalanish quyidagicha tartibda amalga oshiriladi:
1) avval uning qiymat turi va nomi e’lon qilinadi (“int a;”, “byte b;”, “float c;”, “float d;”, “String s;” kabi);
2) unga aniq qiymat o’zlashtiriladi (“a = 0;”, “b = -5;”, “c = 2.5;”, “d = 1.0;”, “s = ‘Salom dunyo!’;” kabi). Agar qiymat turi matn bo’lsa, qiymat doim qo’shtirnoqqa olinadi;
3) shundan keyin undan xohlagancha foydalanish mumkin, bunda foydalanish doirasi (joyi) o’zgaruvchining turiga bog’liq bo’ladi.
Agar o’zgaruvchi e’lon qilinganidan keyin unga qiymat o’zlashtirilmasa, kompilyator ko’p hollarda unga avtomatik ravishda 0 (nol) qiymatini (agar qiymat turi son bo’lsa) yoki “” (bo’shliq) qiymatini (agar qiymat turi matn bo’lsa) o’zlashtiriladi. Lekin, har doim unga dastlabki qiymatni o’zlashtirish maqsadga muvofiq hisoblanadi.

Kodni ixchamlashtirish maqsadida o’zgaruvchini e’lon qilish paytida unga dastlabki qiymatni o’zlashtirish ham mumkin. Masalan “int a = 0;”, “float c = 2.5;” kabi.

O’zgaruvchiga o’zlashtirilgan qiymat o’zgaruvchining oldindan belgilangan qiymat turiga mos kelmasa, kompilyator xatolikni o’zi to’g’rilab oladi. Masalan, int a = 2.35 amalida qiymat turi sifatida buton son (int) e’lon qilingan, lekin o’zlashtirilgan qiymat kasr son. Kompilyator bunday holda a o’zgaruvchiga 2 qiymatini o’zlashtiradi, ya’ni faqat butun qismini qabul qiladi, kasr qismini tashlab yuboradi (yaxlitlanmaydi).

Kompilyator ko’p hollarda son ko’rinishidagi boshqa qiymat turini int qiymat turi sifatida qarashi mumkin. Masalan, bool qiymat turidagi HIGH yoki true qiymatlarini int qiymat turidagi 1 raqami sifatida, LOW yoki false qiymatlarini int qiymat turidagi 0 raqami sifatida qaraydi. Lekin bu dastur ishiga ta’sir ko’rsatmaydi, aksincha uni osonlashtiradi. Foydalanuvchi ham bool qiymat turidagi o’zgaruvchi qiymatini kod davomida 1 yo 0 ko’rinishida ifodalashi mumkin. Bool qiymat turi bilan e’lon qilingan o’zgaruvchiga ataylab yoki tasodifan notog’ri o’zlashtirilgan 1 dan katta har qanday qiymatni kompilyator har doim 1 (HIGH, true) sifatida qabul qiladi.

Struktura

Struktura (struct) – o’zgaruvchilarning qo’shma (birlashgan) ko’rinishi, ya’ni har xil qiymat turidagi o’zgaruvchilarning bitta nom ostida e’lon qilinishi hisoblanadi. Struktura e’lon qilishi va qo’llanilishi jihatidan C++ dasturlash tilidagi klassni eslatadi: u ham struktura sarlavhasi kabi (klassning obyektiga o’xshab) e’lon qilinadi. Struktura turini yorliq deb yuritiladi. Struktura quyidagicha e’lon qilinadi:

struct <yorliq> {
  <1-tur> <1-o’zgaruvchi>;
  <2-tur> <2-o’zgaruvchi>;
  <3-tur > <3-o’zgaruvchi>;
};
Masalan, umumiy “menigStrukturam” yorlig’i (turi) ostida 5 xil a’zolarini (o’zgaruvchilarni) e’lon qilish:
struct menigStrukturam{
  boolean bayroqcha1;
  byte bufer1;
  int son1;
  long son2;
  byte massiv1[5];
};
Yorliq – qiymatlarning alohida (aralash) turi deb qabul qilinadi. Yorliqdan foydalanib, strukturaning o’zini e’lon qilish mumkin:

<yorliq> <struktura nomi>; // 1 ta strukturani e’lon qilish
<yorliq> <1-struktura nomi>, <2-struktura nomi>; // <yorliq> turli 2 ta strukturani e’lon qilish
<yorliq> <struktura nomi>[3]; // <yorliq> turli strukturalar massivini e’lon qilish

Shuningdek, strukturani yorliq yaratmasdan ham e’lon qilish mumkin:

struct {
<1-tur> <1-o’zgaruvchi nomi>;
<2-tur> <2-o’zgaruvchi nomi>;
<3-tur> <3-o’zgaruvchi nomi>;
} <struktura nomi>;
  • Struktura a’zosiga murojaat qilish quyidagicha amalga oshiriladi (klass kabi): <struktura nomi>.<o’zgaruvchi nomi> operatori qiymatini o’qish va o’zgartirish imkonini beradi.
  • agar 2 ta struktura bir xil tuzilgan bo’lsa (1 ta yorliq asosida e’lon qilingan bo’lsa), 1 ta strukturani boshqasiga o’zlashtirish ham mumkin. Barcha o’zgaruvchilar mos ravishda o’z o’rinlariga yoziladi: <struktura nomi1> = <struktura nomi2>;
  • Strukturani o’zlashtirishning yana bir qulay usuli: <struktura nomi>=(<yorliq>){<1-o’zgaruvchi qiymati>,<2-o’zgaruvchi qiymati>,<3-o’zgaruvchi qiymati>}

//Misollar:
// 1-qadam: ‘yorliq1‘ turli struktura yorlig’i yaratiladi va uning a’zolari (o’zgaruvchilari) e’lon qilinadi:

struct yorliq1{
  boolean a;
  byte b;
  int c;
  long d;
  byte arr[5];
};
//2-qadam:
yorliq1 qiymatlar2; // ‘yorliq1’ turida ‘qiymatlar2′ nomli struktura yaratiladi
yorliq1 qiymatlar3[3]; // ‘yorliq1’ turli ‘qiymatlar3’ nomli 3 o’lchovli strukturalar massivi yaratiladi
// 3-qadam: struktura a’zolariga qiymatlarni bevosita o’zlashtiramiz:

void setup() {

   qiymatlar2.a = true;
   qiymatlar2.b = 10;
   qiymatlar2.c = 1200;
   qiymatlar2.d = 789456;
   qiymatlar2.arr[0] = 10;
   qiymatlar2.arr[1] = 20;
   qiymatlar2.arr[2] = 30;
// ‘qiymatlar2′ strukturasini ‘qiymatlar3′ strukturasiga 0-tartib bilan o’zlashtiramiz:
   qiymatlar3[0] = qiymatlar2;
// ‘qiymatlar2′ strukturasidagi massiv elementini ‘qiymatlar3′ strukturasiga 1-tartib bilan o’zlashtiramiz:
qiymatlar3[0].arr[1] = qiymatlar2.arr[1];
// 2-tartibli ‘qiymatlar3′ strukturasini ‘qiymatlar1’ dagi o’zgaruvchilar qiymatlari bilan to’ldiramiz:
qiymatlar3[2] = (qiymatlar1) {
    false, 30, 3200, 321654, {1, 2, 3, 4, 5}
  };
}

String qiymat turi bilan ishlash (parsing)

Parsing – qatorni tahlil qilib, uning bir qismini yoki kerakli qiymatni ajratib olish jarayoni.

Arduino qurilmalari bilan ishlashda parsingdan ko’p foydalanilishini hisobga olib, bu haqda batafsilroq ma’lumotga ega bo’lish maqsadga muvofiq.

Yuqorida ham aytib o’tilganidek, Arduino qurilmasi bilan boshqa qurilmalar bog’langanidan so’ng, ular o’rtasidagi ma’lumot almashinuvida qatordan keng foydalaniladi. Chunki, undan foydalanish qulay va uni boshqa qiymat turlariga o’tkazish ham nisbatan oson bajariladi. Masalan, 2 ta qurilma o’rtasidagi bog’lanishda almashinadigan ma’lumot (bufer ma’lumoti)da turli xil sonlar, telefon raqamlari va boshqa kodlar mavjud bo’lsa, qator bilan ishlovchi buyruq va funksiyalar yordamida ularni ajratib olish hamda tegishli qiymat turiga almashtirish mumkin bo’ladi. Odatda, bufer ma’lumotini shakllantisihda uning yakunlanganini identifikatsiyalovchi qator oxiri belgisi ham qo’shib qo’yiladi (qator oxiriga “\r” kodini qo’shish yordamida). Shuningdek, agar buferdagi ma’lumot 1 tadan ortiq qatordan tashkil topgan bo’lsa, yangi qator belgisi (“\n” kodi) ham qo’llaniladi.

Parsing jarayonida Arduinoda qatorlar bilan ishlashning quyidagi metodlaridan foydalaniladi (qo’llanilish formati: <matn_qatori_nomi>.<metod_nomi>):

charAt(indeks) – qatorning ko’rsatilgan pozitsiyasi (indeksidagi) 1 ta qiymatni qaytaradi. Masalan, a.charAt(0)a nomli qatorning 1-pozitsiyasidagi (0-indeksidagi) elementni qaytariladi (indeks 0 dan boshlab hisoblanadi, shuning uchun qiymati pozitsiyanikidan 1 ta birlikka kam bo’ladi. ).

setCharAt(indeks, qiymat) – qatorning ko’rsatilgan pozitsiyasidagi (indeksidagi) qiymatni yangi qiymat bilan almashtiriladi. Masalan, a.charAt(0, “S”) – a nomli qatorning 0-pozitsiyasidagi elementi “S” belgisi bilan almashtiriladi.

compareTo() – qatorlarni ASCII jadvali bo’yicha o’zaro joylashgan o’rinlarini taqqoslash. Masalan, a.compareTo(b)a nomli qatorning b nomli qatordan oldin yoki keyin kelayotganligini tekshiradi va agar a qator o’rni b dan oldin kelsa manfiy, b qator a qatordan oldin kelsa musbat, ikkalasi bir xil bo’lsa 0 (nol) qiymatini qaytaradi.

concat() – ixtiyoriy turdagi raqamli qiymatni matnli qatorga qo’shib (birlashtirib) oladi va qo’shib olish muvaffaqiyatli yoki muvaffaqiyatsiz ekanligini ifodalaydi. Masalan,  a.concat(num)a nomli matnli qatorga num qaymatini qo’shib olish muvaffaqiyatli bo’lsa true, aksincha false qiymatini qaytaradi. Xuddi b = a + num ifodasi bilan bir xil natija beradi (a, b – matnli qatorlar, num – sonli qiymat).

endsWith() – qator oxiri boshqa qator qiymatiga mos kelishi yoki mos kelmasligini (qator qanday matn bilan yakunlanishini) tekshiradi. Agar mos kelsa true, aksincha false qiymatlarini qaytaradi. Masalan, a.endWith(b)a qatori oxirida b qatori mavjudligi tekshiriladi.

startsWith() – qator boshlanish boshqa qator qiymatiga mos kelishi yoki mos kelmasligini (qator qanday matn bilan boahlanishini) tekshiradi. Agar mos kelsa true, aksincha false qiymatlarini qaytaradi. Masalan, a.startsWith(b)a qatori b qatori bilan boshlanishini tekshiriladi.

equals() – ikkita qator o’zaro bir xilligini tekshiradi, bir xil bo’lsa true, aksincha false qiymati qaytariladi. Bunda, matnlar registri (bosh va kichik harflar) ham hisobga olinadi. Masalan, a.equals(b)a qatori b qatori bilan bir xilligi tekshiriladi, matn registri hisobga olinadi.

equalsIgnoreCase() – ikkita qator o’zaro bir xilligini tekshiradi, bir xil bo’lsa true, aksincha false qiymati qaytariladi. Bunda, matnlar registri hisobga olinmaydi. Masalan, a.equalsIgnoreCase(b)a qatori b qatori bilan bir xilligi tekshiriladi, matn registri hisobga olinmaydi.

indexOf() – qatorda boshqa qator mavjudligi va agar mavjud bo’lsa, uning joylashgan o’rnini (indeksini) qaytaradi, mavjud bo’lmasa, -1 qiymatini qaytaradi.  Masalan, a.indexOf(b)a qatorida b qatori mavjud bo’lsa, uning indeksi, aksincha -1 qiymati qaytariladi, izlash a qatorining boshidan oxirigacha amalga oshiriladi. Ushbu metodni a.indexOf(b, indeks) ko’rinishida ham ifodalash mumkin. Bunda, indeks argumenti izlashni boshlash indeksi aniq ko’rsatiladi. Masalan, a.indexOf(b, 10)a qatorining 11-pozitsiyasi (10-indeksi) dan boshlab oxirigacha b qatori mavjud bo’lsa, uning indeksi, aksincha -1 qiymati qaytariladi, izlash a qatorning 11-pozitsiyasidan boshlab uning oxirigacha amalga oshiriladi.

lastIndexOf() – qatorda boshqa qator mavjudligi va agar mavjud bo’lsa, uning aniqlangan indekslar ichidagi eng oxirgisining indeksini, mavjud bo’lmasa, -1 qiymatini qaytaradi.  Masalan, a.lastIndexOf(b)a qatorida b qatori bir nechta o’rinda mavjud bo’lsa, uning eng oxirgisi indeksi, aksincha -1 qiymati qaytariladi.

length() – qatorning uzunligini (undagi belgilar jami sonini) qaytaradi. Masalan, a.length()a qatori uzunligini qaytaradi.

remove() – qatorning ko’rsatilgan indeksdan to oxirigacha yoki ko’rsatilgan boshqa indeksgacha oraliqdagi barcha belgilarini o’chiradi. Masalan, a.remove(10)a qatorining 10-indeksidan oxirigacha bo’lgan belgilari o’chiriladi. a.remove(10, 25)a qatorining 10-indeksidan 25-indeksigacha bo’lgan belgilari o’chiriladi.

replace() – qatorda uchragan bor matnni boshqa matn bilan almashtiradi. Masalan, a.replace(“salom”, “xayr”)a qatorda uchragan barcha “salom” matnlarini “xayr” matnlariga almashtiradi.

reserve() – xotiradan qator o’zgaruvchisi uchun ma’lum bayt joyni oldindan rezervga olish (“bron” qilish). Masalan, a.reserve(100)a qator o’zgaruvchisi uchun 100 bayt joy ajratib qo’yilishi kerakligi ko’rsatilmoqda. Xotiradan oldindan joy olish nafaqat qatorning maksimal uzunligini belgilab qo’yilgani bilan, balki qator bilan ishlashning tezroq bajarilishi bilan ham ahamiyatli (kodda qator o’zgaruvchisi qiymati o’zgargan taqdirda, uning uzunligi ko’rsatilgan chegaradan oshmaydi).

c_str() – // matnni “c” formatiga (null-terminated string) o’tkazadi va hosil bo’lgan matnga ko’rsatkichni qaytaradi (qatorga char* ko’rsatkichni qaytaradi). a.c_str(char* b)a qatorga char* b ko’rsatkich qaytariladi.

trim() – matn boshi va oxiridagi probellarni o’chirish. a.trim()a qatori boshi va oxiridagi probellar o’chirib tashlanadi.

substring() – ko’rsatilgan indeksdan boshlab oxirigacha yoki ko’rsatilgan ikkinchi indeksgacha oraliqda qatorda mavjud bo’lgan belgilar ketma-ketligini qaytarish. Masalan, a.substring(i)a qatorining i indeksidan boshlab oxirigacha oraliqda mavjud belgilar ketma-ketligi qaytariladi. Yoki, a.substring(i1, i2) – ko’rsatilgan boshlang’ich indeksdan (i1 dan) boshlab ko’rsatilgan oxirgi indeksgacha (i2 gacha) qatorda mavjud bo’lgan belgilar ketma-ketligi qaytariladi.

toCharArray() – qatorning belgilarini char turli massivga (buferga), ma’lum uzunlikkacha o’zlashtirish va avtomatik ravishda unga qator oxiri belgisini qo’shish. Masalan, a.toCharArray(bufer, len)a qatorining belgilarini char turli, bufer nomli massiv-buferga len uzunligigacha bo’lgan qismini o’zlashtiriladi va qator oxiri belgisi qo’shadi.

getBytes() – qatorning ma’lum uzunlikdagi qismini byte turidagi massiv-buferga nusxalash va avtomatik ravishda qator oxiri belgisini qo’shish. Masalan, a.getBytes(bufer, len)a qatorining belgilarini byte turli, bufer nomli massiv-buferga len uzunligigacha bo’lgan qismini nusxalaydi va qator oxiri belgisi qo’shadi.

toFloat() – qator sonli qiymatlarini float qiymat turiga aylantiradi (konvertatsiyalaydi) va qaytaradi. Masalan, a.toFloat()a qatoridagi sonli qiymatlarni float qiymat turiga konvertatsiyalaydi. String a = “12.34” yoki String a = “abc12.34” bo’lsa, a.toFloat() natijasi 12.34 bo’ladi.

toDouble() – qator sonli qiymatlarini double qiymat turiga aylantiradi (konvertatsiyalaydi) va qaytaradi. Masalan, a.toDouble()a qatoridagi sonli qiymatlarni double qiymat turiga konvertatsiyalaydi. String a = “12.34” yoki String a = “abc12.34” bo’lsa, a.toDouble() natijasi 12.34 bo’ladi.

toInt() – qator sonli qiymatlarini butun sonli (bool, byte, int, long, uint64_t) formatdagi qiymat turiga aylantiradi (konvertatsiyalaydi) va qaytaradi. Masalan, a.toInt()a qatoridagi sonli qiymatlarni int qiymat turiga konvertatsiyalaydi. String a = “1234” yoki String a = “abc1234” bo’lsa, a.toInt() natijasi 1234 bo’ladi.

toLowerCase() – qatordagi barcha harfli belgilarni quyi registrga o’tkazadi. Masalan, agar String a = “ABCD123” yoki String a = “ABcd123” bo’lsa, a.toLowerCase() natijasi “abcd123” bo’ladi.

toUpperCase() – qatordagi barcha harfli belgilarni yuqori registrga o’tkazadi. Masalan, agar String a = “abcd123” yoki String a = “ABcd123” bo’lsa, a.toUpperCase() natijasi “ABCD123” bo’ladi.

Qiymat turlarini konvertatsiyalash

Arduinoda dasturlash jarayonida ko’p hollarda sonli turdagi qiymatni matnli qatorga va aksincha matn ko’rinishidagi sonni sonli formatlardan biriga aylantirishga tog’ri keladi. Ayniqsa, ma’lumotlarni aloqa kanallari orqali yuborish yoki ularni xotira qurilmasiga saqlashdan oldin, ularni tegishli (byte) formatga o’tkazish, aksincha, ularni qabul qilinganidan yoki xotiradan o’qilganidan so’ng yana tushunarli bo’lgan matnga formatga aylantirish zaruratiga amalda ko’p duch kelinadi. Shuning uchun quyida asosiy turlardagi sonli qiymatlarni matn ko’rinishiga va aksincha o’tkazish bo’yicha ilgari o’rganilgan ma’lumotlarni ixcham holda keltirib o’tiladi. Bunda massiv ma’lumotlarini matnga yoki aksincha o’zgartirishda bir nechta amallardan foydalanishga to’g’ri keladi.

O’nli formatdagi (bool, byte, int, long, float, double) sonni matnga aylantirish:
int a = 32000; String matn = (String)a; // Natija: matn = “32000”.
float a = -5.68; String matn = (String)a; // Natija: matn = “-5.68”.
char formatidagi belgini matnga aylantirish:
char a = ‘A’; String matn = (String)a; // Natija: matn = “A”.
char a = 65; String matn = (String)a; // Natija: matn = “A”.
char formatidagi bir nechta ketma-ket belgilarni matnga aylantirish:
char *a = “Ab+0”; String matn = (String)a; // Natija: matn = “Ab+0”.
Matnni o’nli formatdagi songa aylantirish:
String matn = “1234567890”; int32_t a = matn.toInt(); // Natija a = 1234567890;
Matnni o’nli (byte) formatidagi massivga aylantirish:
String matn = “0123456789ABCDEF”; byte a[16]; matn.toCharArray(a, 17);
// Natija: a[16] = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70}.
Sonli qiymatli massivni matnga aylantirish:
byte a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String matn = “”; for (int i = 0; i < 10; i++) {matn += a[i];}
// Natija: matn = “012345678910”.
HEX formatida ifodalangan sonli qiymatli massivni matnga aylantirish:

byte a[16] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10}; String matn = “”; for (int i = 0; i < 16; i++) {matn += a[i];}
// Natija: matn = “12345678910111213141516”.
ASCII formatda ifodalangan sonli qiymatlardagi massivni matnga aylantirish:
char a[16] = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70}; String matn = “”; for (int i = 0; i < 16; i++) {matn += a[i];}
// Natija: matn = “0123456789ABCDEF”.

Добавить комментарий