读书人

纯算法实现数字转字符串解决办法

发布时间: 2012-04-19 14:36:43 作者: rapoo

纯算法实现数字转字符串
1. 不能依赖第三方库。
2. 32 位平台,intel 处理器,小尾编码。

我只实现了转为 十六进制 的。
期待高手给出转为 十进制 的。

下面是我的代码:

C/C++ code
#define LOBYTE(x)        ((x)&0x0F)#define HIBYTE(x)        ((x)>>4)#define ByteToChar(x)    (('0'+(x))>'9'?'a'+(('0'+(x))-'9'-1):'0'+(x))void IntToA(char *str,const int *num){    unsigned char *p = (unsigned char*)new int;    int len = sizeof(int)*2+sizeof(char);//    str = new char[len];//    memset(str, 0, len*sizeof(char));    memcpy(p, num, sizeof(int));    for (int i=0, index = len -2; index >= 0; i++, index--) {        str[index] = ByteToChar(LOBYTE(p[i]));        str[--index] = ByteToChar(HIBYTE(p[i]));    }}int _tmain(int argc, _TCHAR* argv[]){    char p[9] = {0};    int n = 0xffab83ec;    IntToA(p, &n);    printf("%s\n", p);    return 0;}



[解决办法]
我写了个可以转换为任意进制的,不知道是不是楼主需要的。
#include <iostream>
#include <algorithm>
using namespace std;

void change(char str[], int num, int base)//str为存结果的字符串,num要转换的数字,base是基数
{
char arr[17] = "0123456789abcdef";//16进制的符号,若想获得更多进制位可以自行添加符号
int len = 0;
while(num)
{
str[len++] = arr[num%base];
num /= base;
}
reverse(str, str+len);//翻转数组函数,在头文件algorithm中,是c++的头文件,也可以自己实现
str[len] = '\0';
}

int main()
{
int x;
char s[99];
cin >> x;
change(s, x, 10);//转换为10进制
cout << s << endl;

return 0;
}

读书人网 >软件架构设计

热点推荐