char*到long如何转换
charc[]="youzhonghui";longn=(long)c;c到n是如何转换的?换算地址还是换算字符串?...
char c[] = "youzhonghui";
long n = (long)c;
c到n是如何转换的? 换算地址 还是换算字符串? 展开
long n = (long)c;
c到n是如何转换的? 换算地址 还是换算字符串? 展开
2015-09-08 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数: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
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
展开全部
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
相关函数
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
n = (long)c; 字符串的首地址
n = *(long *)c; 将c数组前32位卡下来作为long的值
n = *(long *)c; 将c数组前32位卡下来作为long的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
存储内容本身未变
只是解释方式变了
c数组中每个字符实际上为4字节的2进制数
将c数组前32位卡下来作为long的值
只是解释方式变了
c数组中每个字符实际上为4字节的2进制数
将c数组前32位卡下来作为long的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过函数来转换的
printf输出函数
printf输出函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |