深入C++实现函数itoa()的分析_C 语言

函数itoa()是将整数型转换为c语言风格字符串的函数,原型:
char * itoa(int data, char*p, int num);
data是传入的带转化的数字,为整型变量(data的最大值为2的31次方减去1),p是传入的字符型指针,指向存储转换后字符串空间的首地址;num指定要转换成几进制的数字字符串(二进制,八进制,十进制,十六进制)。
如有不足之处,还望指正!!!

复制代码 代码如下:

// TestInheritance.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int myItoa(int data, char* p, int num)
{
 if (p == NULL)
 {
  return -1;
 }
 if (data < 0)
 {
  *p++ = '-';
  data = 0 - data;
 }
 int temp = 0;
 int flag = 0; //标志位 0-不存储 1-存储
 if (num == 10)
 {//十进制
  for (int i = 0; i < 10; i++)
  {
   temp = static_cast<int>(data / pow(10.0, 9-i));// pow(i,j),求i的j次方,temp取得当前最高位
   if (temp != 0)  //去掉最前面的0
   {
    flag = 1;//将标志位变为1,可以存储
   }
   if (flag != 0)
   {
    *p++ = temp + '0';  //变成字符
    data = data % static_cast<int>(pow(10.0, 9-i));
   }
  }
 }
 else if (num == 2)
 {//二进制
  for (int i = 0; i < 32; i++)
  {
   temp = static_cast<int>(data / pow(2.0, 31-i)); //int型,存储值最大为(2的31次方-1),
   if (temp != 0)
   {
    flag = 1;
   }
   if (flag != 0)
   {
    *p++ = temp + '0';
    data = data % static_cast<int>(pow(2.0, 31 - i));
   }
  }
 }
 else if (num == 16)
 {//十六进制
  for (int i = 0; i < 8; i++)
  {
   temp = static_cast<int>(data / pow(16.0, 7-i));
   if (temp != 0)
   {
    flag = 1;
   }
   if (flag != 0)
   {
    if (temp >= 0 && temp <= 9)
    {
     *p++ = temp + '0';
    }
    else if (temp >= 10 && temp <= 15)
    {
     *p++ = temp - 10 + 'A';
    }
    data = data % static_cast<int>(pow(16.0, 7 - i));
   }
  }
 }
 else if (num == 8)
 {//八进制
  for (int i = 0; i < 16; i++)
  {
   temp = static_cast<int>(data / pow(8.0, 15-i));
   if (temp != 0)
   {
    flag = 1;
   }
   if (flag != 0)
   {
    *p++ = temp + '0';
    data = data % static_cast<int>(pow(8.0, 15-i));
   }
  }
 }
}
int _tmain(int argc, _TCHAR* argv[])

 int i = 100;
 char a[32] ={0};
 char b[32] ={0};
 char c[32] ={0};
 char d[32] ={0};
 cout << i << "的八进制表示为: ";
 myItoa(i, a, 8);
 cout << a << endl;
 cout << i << "的十进制表示为: ";
 myItoa(i, b, 10);
 cout << b << endl;
 cout << i << "的二进制表示为: ";
 myItoa(i, c, 2);
 cout << c << endl;
 cout << i << "的十六进制表示为: ";
 myItoa(i, d, 16);
 cout << d << endl;
 return 0;
}

时间: 2024-09-20 07:18:30

深入C++实现函数itoa()的分析_C 语言的相关文章

C++虚函数表实例分析_C 语言

多态是C++面向对象程序设计的一个重要特性.以前看到虚函数觉得很神奇,为什么就能实现多态了呢.最初的时候曾设想,要实现运行时多态,应该让对象的某个部分始终指向一个固定的地址,子类继承的时候,就修改这个地址的内容.这样,父类和子类都是到同一个固定地址去读取内容,在运行时就能表现不同行为. 在看了<深度探索c++对象模型>之后,发现思路是类似的.在对象中,有一个指针指向一张虚函数表,里面按照次序存放了每一个虚函数,当子类继承的时候,即到虚函数表的指定位置去修改函数地址.当我们通过父类指针来操作一个

memset函数的使用分析_C 语言

1.void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c.2.例子 复制代码 代码如下: #includevoid main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",s);getchar();return 0;} 3.memset() 函数常用于内存空间初始化.如: 复制代码 代码如下: c

C++虚函数的实现机制分析_C 语言

本文针对C++的虚函数的实现机制进行较为深入的分析,具体如下: 1.简单地说,虚函数是通过虚函数表实现的.那么,什么是虚函数表呢? 事实上,如果一个类中含有虚函数,则系统会为这个类分配一个指针成员指向一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上就是一个函数指针的数组. 例如下面这个例子: class Parent { public: virtual void foo1() { } virtual void foo1() { } void foo1(); }; class Ch

C语言函数的递归和调用实例分析_C 语言

一.基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. 二.递归条件 采用递归方法来解决问题,必须符合以下三个条件: 1.可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减. 说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用. 2

C/C++常用函数易错点分析_C 语言

本文简单分析了C/C++中常用函数的易错点,包括memset.sizeof.getchar等函数.分享给大家供大家参考之用.具体分析如下: 1.memset #include <string.h> void* memset( void* buffer, int ch, size_t count ); 将内存中buffer的前count个字节的内容全部设置为ch指定的ASCII值.经常用来初始化数组.复制时以字节为单位,如果buffer是int long,或者其他类型的指针时,需要注意不一定为数

基于malloc与free函数的实现代码及分析_C 语言

用于内存管理的malloc与free这对函数,对于使用C语言的程序员应该很熟悉.前段时间听说有的IT公司以"实现一个简单功能的malloc"作为面试题,正好最近在复习K&R,上面有所介绍,因此花了些时间仔细研究了一下.毕竟把题目做出来是次要的,了解实现思想.提升技术才是主要的.本文主要是对malloc与free实现思路的介绍,蓝色部分文字是在个人思考中觉得比较核心的东西:另外对于代码的说明,有一些K&R上的解释,使用绿色加亮. 在研究K&R第八章第五节的实现之前

C++的get()函数与getline()函数使用详解_C 语言

C++ get()函数读入一个字符 get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的. 1) 不带参数的get函数 其调用形式为 cin.get() 用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符. 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同. [例]

C语言的递归思想实例分析_C 语言

本文实例分析C语言的递归思想,分享给大家供大家参考之用.具体方法如下: 通俗点来说,递归就是自己调用自己. 递归的难点一是理解递归的执行调用过程,二是设置一个合理的递归结束条件. 下面来看一段摘自书中的简单程序: #include <STDIO.H> long fact(int n); long rfact(int n); int main(void) { int num; printf("This program calculates factorials.\n"); p

C语言中qsort函数用法实例小结_C 语言

本文实例汇总了C语言中qsort函数的常见用法,非常具有实用价值.分享给大家供大家参考.具体分析如下: C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二.对char类型数