String fonksiyonu yazamadım?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,591
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
8,612
Mesajlar
140,856
Üyeler
3,426
Son üye
Fatih Kemal

Son kaynaklar

Son profil mesajları

Abdullah karaoglan falcon_browning Abdullah karaoglan wrote on falcon_browning's profile.
selamın aleyküm ses sistemindeki cızırtıyı hallettınızmi
"Araştırma, ne yaptığını bilmediğinde yaptığın şeydir." - Wernher von Braun
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Back
Top