字符数组中存十六进制数如何转成十进制数?

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

最好是有现在的函数可用.
...全文
800 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjgbupt 2007-07-30
  • 打赏
  • 举报
回复
不可以,我都试过了,不知道这个是什么意思
xiuhai 2007-07-28
  • 打赏
  • 举报
回复
可以吧!
zhangjgbupt 2007-07-28
  • 打赏
  • 举报
回复
count += sprintf(tmp+count, "%x", ch[i]&0xff);
ch[i]&0xff这句起什么左右,直接可以用ch[i]吗??
ltolll 2007-07-27
  • 打赏
  • 举报
回复
0x012fab23的十进制不是19901219吗?
-------------------------------------
是的,对不起,我搞错了

请问jxlczjp77()
char* pa=(char*)&a;//这句我还看得懂
pa[0]=ch[3];//这4句为什么字节是倒过来存的呢?
pa[1]=ch[2];
pa[2]=ch[1];
pa[3]=ch[0];
为什么这么写,是不是与内存存储结构有关,能否解释一下?
ammana_babi 2007-07-27
  • 打赏
  • 举报
回复
zzyjsjcom()
与内存存储结构 没有关系


我觉得这样写代码是不安全的,有的CPU或者IC是不仅仅支持一种从高到低的存储器访问和存储模式的。这样做是不是要冒点风险?
zzyjsjcom 2007-07-27
  • 打赏
  • 举报
回复
与内存存储结构 没有关系
zzyjsjcom 2007-07-27
  • 打赏
  • 举报
回复
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)
jixingzhong 2007-07-26
  • 打赏
  • 举报
回复
#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); 循环构造字符串。
jixingzhong 2007-07-26
  • 打赏
  • 举报
回复
char ch[40]="012FAB23";
long num=0;

num = strtol(ch, NULL, 16);
printf("num = %ld\n", num);
jxlczjp77 2007-07-26
  • 打赏
  • 举报
回复
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;
halve 2007-07-26
  • 打赏
  • 举报
回复
sprintf()

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧