首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符数组中存十六进制数怎么转成十进制数

2012-03-26 
字符数组中存十六进制数如何转成十进制数?bytech[40]{0X01,0X2F,0XAB,0X23}这个十六进制数连在一起就是:0

字符数组中存十六进制数如何转成十进制数?
byte   ch[40]={0X01,0X2F,0XAB,0X23}
这个十六进制数连在一起就是:012FAB23,想要将其转成十进制的数(20070330)存在数值或字符串变量里都可以.

最好是有现在的函数可用.

[解决办法]
0x012fab23的十进制不是19901219吗?

byte ch[40]={0X01,0X2F,0XAB,0X23}
int a;
char* pa=(char*)&a;
pa[0]=ch[3];
pa[1]=ch[2];
pa[2]=ch[1];
pa[3]=ch[0];

cout < <a < <endl;
[解决办法]
char ch[40]= "012FAB23 ";
long num=0;

num = strtol(ch, NULL, 16);
printf( "num = %ld\n ", num);
[解决办法]
#include <stdio.h>
#include <stdlib.h>

int main()
{
char ch[40]={0X01,0X2F,0XAB,0X23}, tmp[40];
long num=0;
int i=0, count=0;

while(ch[i])
{
count += sprintf(tmp+count, "%x ", ch[i]&0xff);
i++;
}
puts(tmp);
num = strtol(tmp, NULL, 16); //现成函数只有这个比较接近你的要求
printf( "num = %ld\n ", num);

system( "PAUSE ");
return 0;
}

但是需要构造一个字符串,
就是 "012FAB23 ",
这里使用 count += sprintf(tmp+count, "%x ", ch[i]&0xff); 循环构造字符串。
[解决办法]
1. (char*)&a 取a的地址并转化为char *类型;
这样 pa就指向了a的最低位的一个字节,ch[3]是最低位的字节,当然要把它赋给pa[0]


2. pa[0] 就是*pa
而,pa[1],pa[2],pa[3]分别是:*(pa+1),*(pa+2),*(pa+3)
[解决办法]
zzyjsjcom()
与内存存储结构 没有关系


我觉得这样写代码是不安全的,有的CPU或者IC是不仅仅支持一种从高到低的存储器访问和存储模式的。这样做是不是要冒点风险?

热点排行