char*到long如何转换

charc[]="youzhonghui";longn=(long)c;c到n是如何转换的?换算地址还是换算字符串?... char c[] = "youzhonghui";
long n = (long)c;
c到n是如何转换的? 换算地址 还是换算字符串?
展开
 我来答
可以叫我表哥
2015-09-08 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464987
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
char*到long的转换可以通过字符串的首地址来实现。
itoa ltoa ultoa 这3个函数在头文件 <stdlib.h>中

其原形:

char *itoa(int value,char *string,int radix)
cahr *ltoa(long value,char *string,int radix)
char *ultoa(unsigned long value,char *string,int radix)

value 要转换的数。
String 字符串结果。
Radix value的基数。

显然易见:

i为int,l为long,ul为unsigned long。

数字不大时,用错了基本没影响。

说明:

此类函数是把 value转换成一个以空格结尾的字符串,并存储在string中(至多33个字节),不执行上溢出检查。

radix指出value的基数,radi 必须在2-36的范围内。

例:

#include <stdlib.h>
#Include <stdio.h>
void main( void )
{

char buffer[20];

int i = 3445;

long l = -344115;
unsigned long ul = 1234567890;
itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s/n", i, buffer );
itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s/n", i, buffer );
itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s/n", i, buffer );
ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 10): 0x%s/n", l, buffer );
ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 10): 0x%s/n", ul, buffer );

}

输出
String of integer 3445 (radix 10): 3445
String of integer 3445 (radix 16): 0xd75
String of integer 3445 (radix 2): 110101110101
String of long int -344115 (radix 10): 0xfffabfcd
String of unsigned long 1234567890 (radix 16): 0x499602d2
许诗文00
2015-07-12 · TA获得超过4291个赞
知道小有建树答主
回答量:425
采纳率:100%
帮助的人:26.8万
展开全部
strtol(将字符串转换成长整型数)
相关函数
atof,atoi,atol,strtod,strtoul
表头文件
#include
定义函数
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字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
范例
#include
main()
{
char
a[]=”1000000000”;
char b[]=”1000000000”;
char
c[]=”ffff”;
printf(“a=%d\n”,strtol(a,NULL,10));
printf(“b=%d\n”,strtol(b,NULL,2));
printf(“c=%d\n”,strtol(c,NULL,16));
}
执行
a=1000000000
b=512
c=65535

strtoul(将字符串转换成无符号长整型数)
相关函数
atof,atoi,atol,strtod,strtol
表头文件
#include
定义函数
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字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明
ERANGE指定的转换字符串超出合法范围。
参考strtol()

#include
main()
{
char
s[]=”aBcDeFgH12345;!#$”;
int i;
printf(“before toupper() :
%s\n”,s);
for(i=0;I
s=toupper(s);
printf(“after toupper() :
%s\n”,s);
}
执行
before toupper() : aBcDeFgH12345;!#$
after toupper()
: ABCDEFGH12345;!#$

对于int转为string或者char

char s[10];

string str;

int i;

itoa(i,s,10);//这是在windows下使用的函数

str=s;

第二种普遍使用的方法是

char *s;

string str

int i;

sprintf(s,"%d",i);

str=s;

string转化为long

要使用char*作为中间过渡

string.c_str()转化为char*,然后使用sscanf()将char*转化为long
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lileyear
2008-07-20 · TA获得超过1499个赞
知道小有建树答主
回答量:1291
采纳率:0%
帮助的人:918万
展开全部
n = (long)c; 字符串的首地址

n = *(long *)c; 将c数组前32位卡下来作为long的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友66ed6f203
2008-07-20 · TA获得超过562个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:278万
展开全部
存储内容本身未变
只是解释方式变了
c数组中每个字符实际上为4字节的2进制数
将c数组前32位卡下来作为long的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
藏风之处
2008-07-20 · TA获得超过643个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:311万
展开全部
通过函数来转换的
printf输出函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式