`
ccjsjymg
  • 浏览: 60666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

十进制转化十六进制问题??

阅读更多
#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;
分享到:
评论
20 楼 flyinghawl 2010-01-04  
ray_linn 写道
汗一个...
for(int i=28;i>=0;i-=4)
{
		*a++=(num>>i)&15;
}




do
    {
      result[step]="0123456789ABCDEF"[number%16];
      number/=16;
      step++;
    }while(number!=0);



哪个不比你的简单?

楼上写的代码很好,用到了移位的知识点,32位的数字,每次右移四位,和1111按位与,求的高四位的十六进制数。而后显示的时候,每次对16取模,求的了低位的数,然后数字变小。代码很简洁,思路清晰。

楼主的代码虽然冗余,仍是一个解决问题的办法,不能一锤子把人打死吧。
19 楼 rubynroll 2009-04-17  
ccjsjymg 写道
你会c不?到我这还是编译不了,你程序好滥,我还是帮你改了一下:
- //#include <stdafx.h>


这个经典, 就冲这个就该投精
18 楼 ray_linn 2009-04-17  
lhyasia 写道
不要摧残新手。

那个什么raylinn还有人叫大大, 说话这么冲哪像



i am not baby sitter。

也没人付钱让我给你谆谆善诱,接受不了大可拉倒。

17 楼 lhyasia 2009-04-17  
不要摧残新手。

那个什么raylinn还有人叫大大, 说话这么冲哪像
16 楼 ccjsjymg 2009-04-15  
哪里问不行吗?不要轻视任何问题。。。。。。。
15 楼 blueion 2009-04-15  
这种问题应该去CSDN问,这里问绝对被鄙视
14 楼 RednaxelaFX 2009-04-12  
night_stalker 写道
stdafx.h 是预编译用的。具体发源是 borland C 还是 VC 忘了…… 反正大工程编译起来飞快。但是 gcc 似乎不支持。

使用 stdafx.h 和 stdafx.cpp(里面只需要包含一行#include "stdafx.h"就够了), 需要指定编译器参数 /Yu"stdafx.h"

stdafx.h这名字是AFX小组留下来的“遗产”,呵呵。AFX是微软为早期的Visual C++开发的Application Framework的缩写(把framework缩写成fx似乎也成了习惯?);AFX后来演化成了MFC,于是小组也跟着改名了,但先前留下来的许多文件名、函数名、类型名就留着没变了。侯捷来上课的时候提到过这个,呵呵。

stdafx.h是预编译头文件(precompiled header,简称PCH),把常用且不经常修改的头文件include在这个文件里,配合PCH相关的编译参数就能为这些头文件生成类似目标文件的代码,这样每次重编译时只要那些头文件没改动就能省去编译它们的步骤,只要重编译改变了的部分然后link就行。
GCC是支持PCH的哦?只是没有用stdafx.h这个名字的习惯而已。
13 楼 ray_linn 2009-04-12  
whaosoft 写道
你们都是高手啊  vc++是我见过的最烂的ide




你确实是低手,说一句话就能错上好几处。

vc++是ide? 什么是ide?连这些东西都弄不清楚,你见过什么ide么?用过什么c++?

这种可笑的说法就好比:松露是我见过最难吃的东西,你吃过松露不?
12 楼 whaosoft 2009-04-12  
你们都是高手啊  vc++是我见过的最烂的ide
11 楼 night_stalker 2009-04-11  
ccjsjymg 写道
小弟刚学,请多多指教,可能stdafx.h不是标准库吧,在我这没法编译,给个联系方式,大哥


stdafx.h 是预编译用的。具体发源是 borland C 还是 VC 忘了…… 反正大工程编译起来飞快。但是 gcc 似乎不支持。

使用 stdafx.h 和 stdafx.cpp(里面只需要包含一行#include "stdafx.h"就够了), 需要指定编译器参数 /Yu"stdafx.h"
10 楼 ccjsjymg 2009-04-11  
嗯,以后注意,哈哈,谢谢楼上的大哥
9 楼 RednaxelaFX 2009-04-11  
ccjsjymg 写道
你会c不?到我这还是编译不了,你程序好滥,我还是帮你改了一下:

在了解别人说的是什么之前先耐心弄清楚是个好习惯,呵呵
ray_linn大大给的代码例子是用C++/CLI写的,需要用VC8或者VC9才可以编译通过,并且需要.NET Framework来运行。虽然如此,实际涉及进制转换部分的代码与标准C++并没有多少区别,稍微修改就能用支持标准C++的编译器编译并运行。
8 楼 ccjsjymg 2009-04-11  
小弟刚学,请多多指教,可能stdafx.h不是标准库吧,在我这没法编译,给个联系方式,大哥
7 楼 ray_linn 2009-04-11  


给你看看上面那段小程序是怎么编译过的?



你改个屁了,注释掉“<stdafx.h>”? 你还是去找个人手把手教你怎么用vc吧。

程序写得不好,就虚心点,别改点鸡零狗碎的东西来挽回面子。
6 楼 ccjsjymg 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");

}
5 楼 ray_linn 2009-04-10  
我服了你了,哪里来的那么多废代码?连关键点都提示出来,还写成那样。

上面两种方法都写给你看!

#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]);
		}


 }
4 楼 ccjsjymg 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");
}

不过还是很谢谢你,你这种形式也挺好的,呵呵
3 楼 ccjsjymg 2009-04-10  
我看了一下,有问题兄弟。。。。。。。。这两个有问题你写多长时间代码了。。。。。。。。
2 楼 ray_linn 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);



哪个不比你的简单?
1 楼 ccjsjymg 2009-04-10  
上述问题通过研究,再给指针动态分配内存空间,需要初始化,将字符数组扩大可赋值数组长度加1,问题解决。。。。。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics