String fonksiyonu yazamadım?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,468
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,558
Mesajlar
126,555
Üyeler
3,058
Son üye
mgozalan

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top