锁定老帖子 主题:十进制转化十六进制问题??
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-10
最后修改:2009-04-10
#include <iostream> #include <string> #include <math.h> #include <vector> using namespace std; /* * 把数字转化为ascii码 */ int getChar_Asci(int a){ switch (a) { case 1: a = 49; break; case 2: a = 50; break; case 3: a = 51; break; case 4: a = 52; break; case 5: a = 53; break; case 6: a = 54; break; case 7: a = 55; break; case 8: a = 56; break; case 9: a = 57; break; default: a = 48; break; } return a; } /* * 十进制转化为16进制 */ string decimalToHex(int num){ vector<int> v; int digit = num; double i =log(digit)/log(16); int pluto = i; int t = 0; for(int i = pluto;i >= 0;i--){ double d = pow(16,i); int j = 1; for(;j <= 15;j++){ int comPare = d*j; if(comPare > digit){ break; } } v.push_back(j-1); t += (d*(j-1)); digit = num - t; } char *stri = new char[v.size()+1]; //修改的地方: memset(stri,'\0',v.size()+1); for(int i = 0;i < v.size();i++){ v[i] = getChar_Asci(v[i]); stri[i] = v[i]; } cout<<strlen(stri)<<endl; string str = "0x"; str += stri; delete stri; return str; } int main(){ string str = decimalToHex(100); cout<<str; system("PAUSE"); } 为什么strlen(stri)长度为3,比较奇怪。。。。。。。。。。。cout<<strlen(stri)<<endl; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-10
上述问题通过研究,再给指针动态分配内存空间,需要初始化,将字符数组扩大可赋值数组长度加1,问题解决。。。。。。。。
|
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-10
汗一个...
for(int i=28;i>=0;i-=4) { *a++=(num>>i)&15; } 或 do { result[step]="0123456789ABCDEF"[number%16]; number/=16; step++; }while(number!=0); 哪个不比你的简单? |
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-10
我看了一下,有问题兄弟。。。。。。。。这两个有问题你写多长时间代码了。。。。。。。。
|
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-10
你下面那个我帮你改了一下:
int main() { /*int t = 0; for(int i = 28;i>=0;i-=4){ t = (>>i)& 15; if(t != 0) cout<<t<<endl; }*/ char *result = new char[100]; memset(result,'\0',100); int step = 0; int number = 63; int flag = number; do { if(flag >= 16) { result[step]="0123456789ABCDEF"[flag/16]; }else{ if(number >= 16){ if(number % 16 == 0) { result[step]="0123456789ABCDEF"[flag%16-flag]; }else { result[step]="0123456789ABCDEF"[number%16]; } }else { result[step]="0123456789ABCDEF"[flag%16]; } } flag/=16; step++; }while(flag!=0); cout<<result<<endl; delete result; system("PAUSE"); } 不过还是很谢谢你,你这种形式也挺好的,呵呵 |
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-11
我服了你了,哪里来的那么多废代码?连关键点都提示出来,还写成那样。
上面两种方法都写给你看! #include "stdafx.h" #include "stdio.h" #include <iostream> #include <string> using namespace System; int main(array<System::String ^> ^args) { //Console::WriteLine(L"Hello World"); char result[20]; int number=10,step=0; do { result[step]="0123456789ABCDEF"[number%16]; //result[step]="0123456789ABCDEF"[number>=16?number%16:number]; number/=16; step++; }while(number!=0); result[step]='\0'; printf("%s\n",strrev(result)); //method No.2 number=10; for(int i=28;i>=0;i-=4) { printf("%c","0123456789ABCDEF"[(number>>i)&15]); } } |
|
返回顶楼 | |
发表时间:2009-04-10
你会c不?到我这还是编译不了,你程序好滥,我还是帮你改了一下:
//#include <stdafx.h> #include <stdio.h> #include <iostream> #include <string> using namespace std; // int main() { char result[20]; int number=10,step=0; char * s="0123456789ABCDEF"; do { result[step]=s[number%16]; //result[step]="0123456789ABCDEF"[number>=16?number%16:number]; number/=16; step++; }while(number!=0); result[step]='\0'; printf("%s\n",strrev(result)); //method No.2 system("PAUSE"); } |
|
返回顶楼 | |
发表时间:2009-04-11
最后修改:2009-04-11
给你看看上面那段小程序是怎么编译过的? 你改个屁了,注释掉“<stdafx.h>”? 你还是去找个人手把手教你怎么用vc吧。 程序写得不好,就虚心点,别改点鸡零狗碎的东西来挽回面子。 |
|
返回顶楼 | |
发表时间:2009-04-11
小弟刚学,请多多指教,可能stdafx.h不是标准库吧,在我这没法编译,给个联系方式,大哥
|
|
返回顶楼 | |
发表时间:2009-04-11
ccjsjymg 写道 你会c不?到我这还是编译不了,你程序好滥,我还是帮你改了一下:
在了解别人说的是什么之前先耐心弄清楚是个好习惯,呵呵 ray_linn大大给的代码例子是用C++/CLI写的,需要用VC8或者VC9才可以编译通过,并且需要.NET Framework来运行。虽然如此,实际涉及进制转换部分的代码与标准C++并没有多少区别,稍微修改就能用支持标准C++的编译器编译并运行。 |
|
返回顶楼 | |