Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




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ı : 33634
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Ş
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 19.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 19.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 19.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 19.4.2024
  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
[email protected]


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