字符数组中存十六进制数如何转成十进制数?
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是不仅仅支持一种从高到低的存储器访问和存储模式的。这样做是不是要冒点风险?