Forum: D Programlama Dili RSS
Bin to Hex
Avatar
zekeriyadurmus #1
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Bin to Hex
Bunu şu şekilde çok acemi ve berbat bir şekilde yapabiliyorum ama biraz daha temiz ve hızlı bir kod olsa fena olmazdı.

string s = "deneme";
string aa;
foreach(a; cast(ubyte[]) s){
    aa ~= (cast(void*) a).to!string;
}

Ali hocam bunu nasıl yapabiliriz?

Zekeriya
Bilgi meraktan gelir...
Bu mesaj zekeriyadurmus tarafından değiştirildi; zaman: 2014-03-30, 17:32.
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aynı şekilde tam tersini :)

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Seninki güzel ama (void*) gibi ilgisiz bir türe bulaşmak garip geliyor. :) Eğer giriş binary ise ubyte dizisi kullanmak daha uygun olur.

1) Sonucun girişin iki katı uzunlukta olacağını bildiği için .reserve'den yararlanan bir çözüm:
char[] binToHex(ubyte[] bin) pure
{
    char[] result;
    result.reserve(bin.length * 2);
 
    foreach (b; bin) {
        result ~= format("%0X", b);
    }
 
    return result;
}
2) Aynı sonucu .reduce ile elde eden bir çözüm:
char[] binToHex(ubyte[] bin) pure
{
    return
        reduce!((sonuç, bayt) => sonuç ~= format("%0X", bayt))
        ((char[]).init, bin);
}
3) Gruplama düzen belirteçlerini kullanan bir çözüm:
char[] binToHex(ubyte[] bin) pure
{
    import std.exception;
    string sonuç = format("%(%0X%)", bin);
    return assumeUnique(sonuç);
}
Ali
Avatar
zekeriyadurmus #4
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkür ederim Ali hocam :)

3.yöntem göze daha hoş geliyor fakat kendi çözümümde ve o çözümde şöyle bir problem var.
Eğer dönüştürülen değer 0x9 ise bunu 09 olarak yazmak yerine 9 olarak yazıyor ve yapıyı bozuyor :(

Peki aynı şekilde hex i bine nasıl çevirmeliyiz sizce?

string hex2bin(string a){
    string b;
    for(int i; i < a.length; i+=2){
        b ~= a[i..i+2].to!ushort(16);
    }
    return b;
}

Şöyle basit acemice bir kod yazdım :)

Zekeriya
Bilgi meraktan gelir...
Avatar
zekeriyadurmus #5
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ufak bir ekleme yaptım sadece ve bu desen 00 olacak şeklinde 2li yazdırıyor "%(%02x%)" :)

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Benim hatam. Evet, bütün %0X'lerin  %02X olması gerekiyordu.

Ali
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
hex2bin de doğru görünüyor ama string'in UTF-8 kod dizisi olduğunu hatırlatırım. Herhangi binary veri depolamaya uygun değildir. Ben olsam ubyte[] kullanırdım.

Benzer nedenle, neden to!ushort? to!ubyte daha mantıklı değil mi?

Ali
Avatar
zekeriyadurmus #8
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Sormadan edemeyeceğim x ile X arasında ne fark var?

Benzer nedenle, neden to!ushort? to!ubyte daha mantıklı değil mi?
Evet haklısınız ubyte olması gerek sadece daha iyi bir çözümü vardır diye çok ellemedim makarna kod misali yazdım

String yapmamın sebebi kendi çalışmamda veriyi mysql den doğrudan çekiyorum tekrar cast işlemi ile uğraşmayayım diye string yaptım. UTF8 sorunu ile mysql de karşılaştım. ARSD kütüphanesi utf8 olması konusunda zorluyordu gerekli satırı sildim sorun kalmadı.

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
x ile X'in farkı, onaltılı çıktıda küçük veya büyük harf kullanılması: ff yerine FF gibi.

  http://dlang.org/phobos/std_format.html#.formattedWrite

Ali
Avatar
zekeriyadurmus #10
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam https://github.com/D-Programming-Language/phobos/blob/2083… burada

toHexString, fromHexString fonksiyonları zaten tanımlanmış :)

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ha ha! :) Oraya bir bakmadığımız için ikimiz de suçluyuz.

Ali
Avatar
Salih Dinçer #12
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
:D
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 05:50:36 (UTC -08:00)