String fonksiyonu yazamadım?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,204
1695022289544.png


Yukarıdaki gibi bir fonksiyonum var ve görüldüğü üzere bir döngü yardımı ile byte dizisini hex olarak stringe dönüştürüp yazdırıyorum. Amacım bu kadar basit.
Hex kodunu görselleştirme amacı ile bir karakter ile bir birinden ayırmak istediğimde saçma sonuçlar alıyorum. bir sürü şey denemedim ama işin içinden çıkamadım.

1695022611523.png


Dizide tek byte var ise istediğim gibi - sembolu ekleniyor ama birden çok byte var ise resimdeki gibi saçma sonuçlar alıyorum.
 
String gibi dinamik olarak boyutlandırma yapan bir class ile işi yaparsan çok verimsiz olur. büyük array'lerde uzun zaman alır. Aşağıdaki sana bir alternatif önereyim. Terminalde denedim, çalışıyor gibi, ama iyi inceleyip her alternatifte doğru davrandığını teyit etmek lazım.

C++:
void make_hex_str(const unsigned char* src, unsigned int srclen, char* dest, unsigned int destsize)
{
    unsigned int dest_avail = destsize / 3;

    for (unsigned int i = 0; (i < srclen) && (i < dest_avail); ++i, destsize -= 3)
    {
        snprintf(dest + i * 3, destsize, "%02X ", src[i]);
    }
}

Bu da deneme programı:

C++:
#include <stdio.h>
#include <string.h>

unsigned char bytes[] = {0x7A, 0x32, 0x89, 0xFF};

char hexstr[100];

void make_hex_str(const unsigned char* src, unsigned int srclen, char* dest, unsigned int destsize)
{
    unsigned int dest_avail = destsize / 3;

    for (unsigned int i = 0; (i < srclen) && (i < dest_avail); ++i, destsize -= 3)
    {
        snprintf(dest + i * 3, destsize, "%02X ", src[i]);
    }
}

int main()
{
    make_hex_str(bytes, sizeof(bytes), hexstr, sizeof(hexstr));

    printf("hexstr = (%s)\n", hexstr);

    return 0;
}

Bash:
[ta@bonsai ~]$ g++ -Wall a.cpp
[ta@bonsai ~]$ ./a.out
hexstr = (7A 32 89 FF )
[ta@bonsai ~]$
 
Deneyeceğim teşekkür ederim. Aslında String ile hiç işim yok. Ancak bu esp32 nin hoşuma giden bir debug sistemi var ve sadece printf gibi çalışıyor. Tek satırda hex göstermenin tek yolu da string kullanmak. Gerçi %s ile char array kabul etmiş gibi duruyor. Denemem lazım şimdilik o bölümü geçtim. Sonra tekrar dönerim...

 
Varsa c_str() de olur ama doğrudan şu şekilde yazmak en iyisi:

C:
void printHex(char *str) {
  printf("Hex: ");
  for (char *s = str; *s != NULL; ++s)
    printf("%x ", *s);
  printf("\n");
}
 

Çevrimiçi personel

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,885
Mesajlar
100,433
Üyeler
2,493
Son üye
cym247

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top