纯算法实现数字转字符串
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;
}