用c语言将十进制数转化为16进制数

时间:2021-10-03 22:25:11
如何将一个不大于256的10进制数转化为16进制数?用c语言编程。急求大神指导

11 个解决方案

#1


n<256,r[1]=n%16;n=n/16;..........

#2


%d输出十进制
%o输出八进制
%x或%X输出十六进制
这些内容入门书上都有

#3


不管10进制数还是16机制数,在计算机内部都是保存成2进制的。只有显示给人看的时候才会有10进制和16机制之分。
例如:
#include <stdio.h>
int main(void)
{
    int a = 127;  //10进制数
  printf("%d\n", a);   //打印10进制数127
    printf("%x\n", a);   //打印16进制数7f
}

#4


但是我这十进制数是在程序中待处理的数,是一个变换的数,例如x(x不大于16),我需要将x转化成16进制用于下面语句处理,而不是在界面显示,求指导

#5


是整数吗?      用c语言将十进制数转化为16进制数

#6


怎么可能转换呢?
不管10进制数还是16机制数,在计算机内部都是保存成2进制的。
只有显示给人看的时候才会有10进制和16机制之分。所以你不用变换 用c语言将十进制数转化为16进制数

#7


只要是数,就不需要转换。除非是字符串。

#8


自己写个栈(也可以用系统的),借用栈,核心代码如下:
SeqStack st;
InitSeqStack(st);

int N = 0;
char ch;
while(val != 0)
{
N = val % m;
if(N >= 10)
{
ch = 'A' +(N - 10);
Push(st,ch);
}
else
{
ch = N + '0';
Push(st,ch);
}
val = val / m;
}
ShowSeqStack(st);
DestroySeqStack(st);

#9


1)每个十进制数字,都是十六进制数字,所以单个数字,不需要转换
2)C,C++代码中的十进制常数,十六进制常数,是用ASCII表示的编码十进制,十六进制数,
这个编译器,会自动转换为二进制数储存
3)字符串表示的十进制数,十六进制数,是用ASCII表示的编码十进制,十六进制数的字符串
     是用字符串储存的,用ASCII表示的编码十进制,十六进制数
    这个进制之间的转换,需要编程或者调用库函数转换。

4)不确定长度的十进制和十六进制数的转换,
     按照转换规律,自己做大数加法,减法,乘法,除法自己做转换处理
    C++可以用string 表示十进制和十六进制数,并定义大数加法,减法,乘法,除法自己做转换处理。

#10


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉

#1


n<256,r[1]=n%16;n=n/16;..........

#2


%d输出十进制
%o输出八进制
%x或%X输出十六进制
这些内容入门书上都有

#3


不管10进制数还是16机制数,在计算机内部都是保存成2进制的。只有显示给人看的时候才会有10进制和16机制之分。
例如:
#include <stdio.h>
int main(void)
{
    int a = 127;  //10进制数
  printf("%d\n", a);   //打印10进制数127
    printf("%x\n", a);   //打印16进制数7f
}

#4


但是我这十进制数是在程序中待处理的数,是一个变换的数,例如x(x不大于16),我需要将x转化成16进制用于下面语句处理,而不是在界面显示,求指导

#5


是整数吗?      用c语言将十进制数转化为16进制数

#6


怎么可能转换呢?
不管10进制数还是16机制数,在计算机内部都是保存成2进制的。
只有显示给人看的时候才会有10进制和16机制之分。所以你不用变换 用c语言将十进制数转化为16进制数

#7


只要是数,就不需要转换。除非是字符串。

#8


自己写个栈(也可以用系统的),借用栈,核心代码如下:
SeqStack st;
InitSeqStack(st);

int N = 0;
char ch;
while(val != 0)
{
N = val % m;
if(N >= 10)
{
ch = 'A' +(N - 10);
Push(st,ch);
}
else
{
ch = N + '0';
Push(st,ch);
}
val = val / m;
}
ShowSeqStack(st);
DestroySeqStack(st);

#9


1)每个十进制数字,都是十六进制数字,所以单个数字,不需要转换
2)C,C++代码中的十进制常数,十六进制常数,是用ASCII表示的编码十进制,十六进制数,
这个编译器,会自动转换为二进制数储存
3)字符串表示的十进制数,十六进制数,是用ASCII表示的编码十进制,十六进制数的字符串
     是用字符串储存的,用ASCII表示的编码十进制,十六进制数
    这个进制之间的转换,需要编程或者调用库函数转换。

4)不确定长度的十进制和十六进制数的转换,
     按照转换规律,自己做大数加法,减法,乘法,除法自己做转换处理
    C++可以用string 表示十进制和十六进制数,并定义大数加法,减法,乘法,除法自己做转换处理。

#10


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉

#11