String fonksiyonu yazamadım?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,443
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.

Kod:
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ı:

Kod:
#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;
}

Kod:
[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:

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

Forum istatistikleri

Konular
7,237
Mesajlar
122,443
Üyeler
2,924
Son üye
aytu

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top