`
ccjsjymg
  • 浏览: 62287 次
  • 性别: 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,问题解决。。。。。。。。

相关推荐

    C#十进制转十六进制显示

    C# 十进制转十六进制显示 用ToString()方法就行 具体用法如下,还有其它几种显示方法。

    十进制转十六进制包含大小端设置_大小端_matlab_十进制_十六进制_

    本文将详细讨论大小端模式,并通过MATLAB实现一个将十进制数转换为十六进制数的函数,同时允许用户选择大小端模式。 首先,我们来解释一下大小端模式。在多字节的数据类型(如32位整数)中,最高有效位(MSB)和...

    十进制转换为十六进制(模块化程序)

    本主题聚焦于将十进制数转换成十六进制数,这是计算机科学中的基本概念,特别是在处理二进制数据、内存表示和编程语言中。在这个模块化程序中,我们有两个关键模块来实现这一功能。 首先,我们要理解十进制和十六...

    十进制转化为二进制_八进制_十六进制代码 C#代码

    在编程领域,尤其是在C#语言中,数据的进制转换是一项基本操作,它涉及将数值从一种基数(如十进制)转换为另一种基数(如二进制、八进制或十六进制)。这里我们将详细探讨这个主题,并提供C#代码实现。 一、十进制...

    如何实现十进制和十六进制转换Visual Basic6.0源程序,VB6.0源代码

    对于包含A-F的十六进制字符串,我们需要先用`&H`前缀将字符串转化为合法的VB6.0十六进制常量,然后再使用`Val()`: ```vb Dim decimalValue As Long decimalValue = Val("&H" & hexValue) ``` 如果`hexValue`包含...

    十进制小数转化为十六进制小数

    十进制小数转化为十六进制小数类 /// /// 十进制整数转化为十六进制(带小数) /// /// &lt;param name="value"&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; public string DecToHex(double value) { string result =...

    MFC十进制转十六进制计算器

    使用VS2010的MFC写了一个进制转换的小计算器。 涉及十进制转十六进制,int,char,CString之间的转换等 对初学C++的人可能对进制的转换,以及变量类型的转换很是头疼,希望对初学者有所帮助

    试题 基础练习 十进制转十六进制.cpp

    十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11

    BAT批处理脚本-格式转换-十进制转十六进制.cmd.zip

    本压缩包文件"BAT批处理脚本-格式转换-十进制转十六进制.cmd.zip"提供了一个批处理脚本,用于将十进制数字转换为十六进制格式。下面我们将详细讨论这个脚本的工作原理、批处理脚本的基本概念以及如何使用和修改这种...

    十进制和十六进制转换成float、double数据

    在计算机科学中,数据通常以不同的进制表示,如十进制、十六进制等。在MATLAB和FPGA(Field Programmable Gate Array)设计中,理解和操作不同进制之间的转换是至关重要的。本文将详细讲解如何将十进制和十六进制...

    c++_二进制数、十进制、十六进制转化的函数

    本文将详细解析如何利用C++编写函数来实现二进制、十进制与十六进制之间的相互转换。 ### 一、十六进制转十进制 首先,我们来看十六进制转十进制的转换函数。十六进制(Hexadecimal)是一种逢16进1的进位制,常用A...

    【老生谈算法】matlab十进制转换十六进制及互转.docx

    MATLAB 十进制与十六进制之间的转换 在计算机科学和信息技术领域中,十进制和十六进制是两个常用的数字表示系统。十进制是我们日常生活中使用的数字系统,而十六进制则广泛应用于计算机编程和数据存储中。MATLAB ...

    C语言,实现进制转换,十进制转换为十六进制

    C语言,实现进制转换,十进制转换为十六进制 例如输入10,转换结果为a

    十进制转化为十六进制.doc

    ### 十进制转十六进制的原理与Java实现 #### 一、基础知识介绍 在计算机科学中,数据表示和转换是非常重要的概念。通常我们使用的数字系统是十进制(base-10),而在计算机内部则更常使用二进制(base-2)或十六...

    byte、十进制、十六进制间的转换

    byte数组、十进制、十六进制间的两两转换

    C语言实现十进制转十六进制

    在计算机科学中,数据的表示通常涉及多种进制系统,其中最常见的是二进制、八进制、十进制和十六进制。本篇文章将深入探讨如何使用C语言将十进制数值转换为十六进制。C语言是一种底层编程语言,提供了丰富的库函数和...

    C实现十进制至十六进制的转换

    "C语言实现十进制至十六进制的转换" C语言实现十进制至十六进制的转换是编程中常见的任务之一。本文将详细介绍C语言实现十进制至十六进制的转换的方法及思路。 一、方法一:使用scanf和printf函数 在这个方法中,...

    十进制转化十六进制转换的小代码

    十进制转化成十六进制说起来是哥比较简单的问题,如果我要你把一个十进制的东西转化成一个十六进的的数字表示,也是一个比较麻烦的事情,这个js代码是比较方便使用,直接下载下来就可以看。具体操作十分的方便,只要...

    十进制与十六进制的转换 数据结构c

    ### 十进制与十六进制的转换及数据结构应用 #### 一、知识点概述 在计算机科学领域,数据在存储、处理时往往需要在不同的数值系统之间进行转换,其中最为常见的就是十进制(Base-10)与十六进制(Base-16)之间的...

    易语言模块十进制转化为十六进制5.rar

    易语言模块十进制转化为十六进制5.rar 易语言模块十进制转化为十六进制5.rar 易语言模块十进制转化为十六进制5.rar 易语言模块十进制转化为十六进制5.rar 易语言模块十进制转化为十六进制5.rar 易语言模块十...

Global site tag (gtag.js) - Google Analytics