char*字符串十六进制转十进制 达人进

xveseyanling 2008-03-07 06:59:32
typedef unsigned long ULONG;
char* l_cpTemp = "0x12345678";
这个里面的0x12345678是十六进制数,我怎么把他转换成unsigned long?
ULONG l_ulTemp =( ULONG ) atol( l_cpTemp )肯定不行,不会把字符串"0x12345678"识别为十六进制数
如果
char* l_cpTemp = "12345678";
ULONG l_ulTemp =( ULONG ) atol( l_cpTemp );转出来的直接是12345678,
请问我该怎么转?
谢谢
...全文
4180 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowei5780651 2010-12-01
  • 打赏
  • 举报
回复
xxjjyy2008


受用了,谢谢
qiri07 2010-11-18
  • 打赏
  • 举报
回复
关注一下
chocol0128 2010-11-18
  • 打赏
  • 举报
回复
受用!
xxjjyy2008 2010-08-05
  • 打赏
  • 举报
回复
#include <stdio.h>
#define YES 1
#define NO 0

int htoi(char s[])
{
int i,n;
int inhex,digital;

i=0;
if (s[i]=='0')
{
i++;
if (s[i]=='x'||s[i]=='X')
{
i++;
}
}

n=0;
inhex=YES;
for(;inhex==YES;i++)
{
if (s[i]>='0'&&s[i]<='9')
digital=s[i]-'0';
else if (s[i]>='a'&&s[i]<='f')
digital=s[i]-'a'+10;
else if (s[i]>='A'&&s[i]<='F')
digital=s[i]-'A'+10;
else
{
inhex=NO;
break;
}
n=16*n+digital;
}
return n;
}

main ()
{
int decimal;
char s[]="0xAA";
decimal=htoi(s);
printf("%d\n",decimal);
}
rook2 2010-05-14
  • 打赏
  • 举报
回复
我也是! 我记得我现在是第四次查这个函数了
每次隔几个月或者几年
或者 移动后换了碰新电脑 资料不在了
又得上网查
所以知道有个WINAPI可惜 没那么强的嗅觉
只要GOOGLE了
正因为如果才放弃500G硬盘
想买2T的可惜难找货那时
就直接买了1.5T的盘 真好闪过掉电门
现在就不用为资料发愁不管以后怎么样
硬盘第一个带走
封了到了1T就用第二个盘备用 就不怕以后硬盘丢了又为资料乱费时间了
所以感觉多花点钱换时间 还是值得的
xveseyanling 2008-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Chiyer 的回复:]
C/C++ code

#include "iostream"
using namespace std;

typedef unsigned long ULONG;

int main()
{
char* l_cpTemp = "0x12345678";
ULONG u = strtoul(l_cpTemp, 0, 16);

cout<<u<<endl;

return 0;
}
[/Quote]
谢谢了
我记得是有系统函数的,自己写太cool了。。。
太忙
ryfdizuo 2008-03-07
  • 打赏
  • 举报
回复

//用hex函数:
//ios_base& hex ( ios_base& str );
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main ()
{
long val,n;
char* l_cpTemp = "0x12345678";
istringstream iss;
string strvalues="12345678";
iss.str (l_cpTemp);
iss>>hex>>val;
cout<<val<<endl;

//测试
long u = strtoul(l_cpTemp, 0, 16);
cout<<u<<endl;

return 0;
}

yzarc 2008-03-07
  • 打赏
  • 举报
回复
char src_data[] = "0x10";
unsigned long result_data = 0;
sscanf( src_data, "%x", &result_data );
lyle3 2008-03-07
  • 打赏
  • 举报
回复
学习下,搜了下,有这样的函数
strtol(将字符串转换成长整型数)
相关函数
atof,atoi,atol,strtod,strtoul
表头文件
#include<stdlib.h>
定义函数
long int strtol(const char *nptr,char **endptr,int base);
函数说明
strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如 base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用 16进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
范例
/* 将字符串a,b,c 分别采用10,2,16进制转换成数字*/
#include<stdlib.h>
main()
{
char a[]=”1000000000”;
char b[]=”1000000000”;
char c[]=”ffff”;
printf(“a=%d ”,strtol(a,NULL,10));
printf(“b=%d ”,strtol(b,NULL,2));
printf(“c=%d ”,strtol(c,NULL,16));
}
执行
a=1000000000
b=512
c=65535
 



strtoul(将字符串转换成无符号长整型数)
相关函数
atof,atoi,atol,strtod,strtol
表头文件
#include<stdlib.h>
定义函数
unsigned long int strtoul(const char *nptr,char **endptr,int base);
函数说明
strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
范例
参考strtol()
abupie 2008-03-07
  • 打赏
  • 举报
回复
字符 => 16进制
sscanf(s, "%x", &hex_val);

16进制 =〉字符
sprintf(s, "0x%x", hex_val);
星羽 2008-03-07
  • 打赏
  • 举报
回复

strtoul 函数,可以转换任意进制的

Convert strings to an unsigned long-integer value.


unsigned long strtoul(
const char *nptr,
char **endptr,
int base
);
unsigned long _strtoul_l(
const char *nptr,
char **endptr,
int base,
_locale_t locale
);
unsigned long wcstoul(
const wchar_t *nptr,
wchar_t **endptr,
int base
);
unsigned long _wcstoul_l(
const wchar_t *nptr,
wchar_t **endptr,
int base,
_locale_t locale
);



Parameters
nptr
Null-terminated string to convert.

endptr
Pointer to character that stops scan.

base
Number base to use.

locale
Locale to use.

Return Value
strtoul returns the converted value, if any, or ULONG_MAX on overflow. strtoul returns 0 if no conversion can be performed. wcstoul returns values analogously to strtoul. For both functions, errno is set to ERANGE if overflow or underflow occurs.

See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on this, and other, return codes.


星羽 2008-03-07
  • 打赏
  • 举报
回复


#include "iostream"
using namespace std;

typedef unsigned long ULONG;

int main()
{
char* l_cpTemp = "0x12345678";
ULONG u = strtoul(l_cpTemp, 0, 16);

cout<<u<<endl;

return 0;
}

ryfdizuo 2008-03-07
  • 打赏
  • 举报
回复
自己写一个函数不行吗?
xveseyanling 2008-03-07
  • 打赏
  • 举报
回复
排除做循环然后把逐个字符转数字再相乘加起来的办法
有什么系统函数吗?

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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