C#nedir?com
 
YAZAR HAKKINDA
Eylem Uğurel
Eylem Uğurel
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
4 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: __int64 inttostr islemi islemler karakter karakteri karakterlerin nnumber sayisal string tipine uinttostr unsigned verecek wchar_t C++ / C++.NET Eylem Uğurel
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C++ / C++.NET
Yayınlanma Tarihi : 26.11.2004
Okunma Sayısı : 22074
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
ChatBot UI Sample 22.10.2017
Turhal Temizer 'in Blogu
C# – IRR Function 22.10.2017
Burak Selim Şenyurt
Asp.Net Core'da Bir WebSocket Macerası 22.10.2017
Burak Selim Şenyurt
.NET Core 2.0 ile Basit Bir Web API Geliştirmek 22.10.2017
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Integer’dan String’e Dönüşüm
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Yazdığımız programlarda matematiksel işlemler yaparken sayısal tiplere (integer, float, double, vb.) gereksinim duyarız. Biz bu gereksinimi, işlemlerimizi yerine getirirken olduğu gibi, sonuçları kullanıcıya yansıtırken de duyabiliriz. Bunun için sayısal tiplerimizi C karakter dizilerine yani string’lere dönüştürmemiz gerekir. 

Visual C++ Runtime (MSVCTR.DLL) kütüphanesi bize bu tür dönüşüm işlemleri için gerekli tüm altyapıyı sağlamış durumda. Ama meraklı ve paranoyak programcılar (benim gibi) dönüşüm işlemini kendi başlarına, belki daha da süratli yapmayı tercih edebilirler. 

Runtime kütüphanedeki fonksiyonlara örnek verecek olursak:
 
char *_itoa( int value, char *string, int radix );
char *_i64toa( __int64 value, char *string, int radix );
char * _ui64toa( unsigned _int64 value, char *string, int radix );
wchar_t * _itow( int value, wchar_t *string, int radix );
wchar_t * _i64tow( __int64 value, wchar_t *string, int radix );
wchar_t * _ui64tow( unsigned __int64 value, wchar_t *string, int radix );

Görüldüğü üzere, pek çok fonksiyon mevcut. _itoa sınıfı fonksiyonlar integer bir sayıyı string tipine dönüştürürler. Tabii Microsoft programcıları işleri basit tutmaya değil de her zevke hitap etmeye eğilimli olduklarından fonksiyonlarına pek çok opsiyon eklemişler. Oysa biz bu işlemi çok basit ve kullanışlı iki fonksiyonla halledebileceğiz. Fonksiyonlarımızın imzaları şöyle olacak:

UINT IntToStr(int, char*);
UINT UintToStr(UINT, char*);
Fonksiyonlarımızdan ilki IntToStr –2147483647’den +2147483647’ye kadar olan sayıları, ikincisi UintToStr de 0’dan 4294967295’e kadar olan sayıları string tipine dönüştürecek. Her iki fonsiyon da kaç karakteri yazdığını geri dönecek. Burada dikkat etmemiz gereken nokta, gösterilen belleğin yani char*’ın gösterdiği yerin yeterli sayıda ayırtılmış olması. Bu sayı null-terminator da dahil IntToStr için 13, UintToStr için de 12’dir. Fonsiyonların kullanımına bakarsak:

char buffer1[13];
IntToStr(-74374, buffer1);
char buffer2[12];
UintToStr(897263, buffer2);
Dönüşüm işlemi çok basit; sayımızı 0’a ulaşana dek 10’a böleceğiz, her bölme işleminin kalanını da Ascii tablosunda ‘0’ a denk gelen 48 sayısı ile toplayıp sonucu karakter olarak gösterilen belleğe yazacağız. En sonunda bellekte biriken karakterlerin sırasını ters çevireceğiz. Bir örnek verecek olursak: 

5784 % 10 = 4  -->  4 + 48 = 52 (‘4’)  -->  5784 / 10 = 578

 578 % 10 = 8  -->  8 + 48 = 56 (‘8’)  -->   578 / 10 =  57

  57 % 10 = 7  -->  7 + 48 = 55 (‘7’)  -->    57 / 10 =   5

   5 % 10 = 5  -->  5 + 48 = 53 (‘5’)  -->     5 / 10 =   0. 

Tabi ki prosedür bununla da bitmiyor. İşlem çekirdeğinin çevresinde bazı ek işlemler yatıyor. Örneğin IntToStr’de 0’dan küçük bir sayı için string’in başına bir ‘-‘ karakteri koymamız gerekiyor. Bunun gibi, dönüşümü tamamlanmış bir string’in null karakteri ile sonlandırılması gerekiyor. Ve tabi ki dönüştürülmüş karakterlerin ters çevrimesi de cabası… 

Şimdi dilerseniz fonksiyonlarımıza geçelim. Öncelikle IntToStr fonksiyonu:

UINT IntToStr(int nNumber, char* pc)
{
  char* p = pc;
  if (nNumber < 0) {
    *p++ = ’-’;
    nNumber = -nNumber;
  }
  char* p0 = p;
  do {
    *p++ = nNumber % 10 + ’0’;
    nNumber /= 10;
  } while (nNumber > 0);
  UINT uLen = p - pc;
  *p-- = ’\0’;
  char t;
  do
    t = *p, *p = *p0, *p0 = t;
  while (++p0 < --p);
  return uLen;
}

Ve UintToStr fonksiyonu:

UINT UintToStr(UINT uNumber, char* pc)
{
  char* p = pc;
  do {
    *p++ = uNumber % 10 + ’0’;
    uNumber /= 10;
  } while (uNumber > 0);
  UINT uLen = p - pc;
  *p-- = ’\0’;
  char t;
  do
    t = *p, *p = *pc, *pc = t;
  while (++pc < --p);
  return uLen;
}

Bir sonraki yazımızda bu işlediğimiz kavramın tersini, yani string’den integer’a dönüşümü inceleyeceğiz. O zamana kadar kendinize iyi bakın ve güzel yazın. 

Eylem Uğurel
eylemugurel@hotmail.com


Makale:
Integer’dan String’e Dönüşüm C++ ve C++.NET dili Eylem Uğurel
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor