当前位置: 技术问答>linux和unix
看bootloader遇到的小问题~请高手帮帮忙~
来源: 互联网 发布时间:2015-12-22
本文导语: 我最近看一块嵌入式开发板的bootloader源码,刚看完几个.s,现在刚开始看.c 昨天看cmddebug.c里面遇到一点小问题,怎么也弄不明白 请大家帮我看看哈 谢谢啦 是关于stroul这个函数的,在linux下函数原型为 unsigned long i...
我最近看一块嵌入式开发板的bootloader源码,刚看完几个.s,现在刚开始看.c
昨天看cmddebug.c里面遇到一点小问题,怎么也弄不明白 请大家帮我看看哈 谢谢啦
是关于stroul这个函数的,在linux下函数原型为
unsigned long int strtoul(const char *nptr, char **endptr, int base);
The strtoul() function converts the initial part of the string in nptr
to an unsigned long integer value according to the given base,
which must be between 2 and 36 inclusive, or be the special value 0.
If endptr is not NULL,
strtoul() stores the address of the first invalid character in *endptr.
If there were no digits at all,
strtoul() stores the original value of nptr in *endptr (and returns 0).
In particular, if *nptr is not `' but **endptr is `' on return, the entire string is valid.
我查到的这段资料说endptr是用来存储第一个无效字符的地址的,就是说将遇到不合条件而终止的nptr中的字符指针由result返回。这样看来存储在endptr中的内容是无效的?
我的问题是:是不是正常请况下返回转换后的长整型数呢?因为如果不这样想很多代码就解释不通
在相关文件里strtoul的定义如下:
bool strtoul(const char *cp, ulong *result, int base){
ulong value, retval;
if (!cp) return false;
// base(柳过)捞 绝阑 锭绰 巩磊凯狼 屈侥栏肺 8, 10, 16柳荐甫 备盒.
if (!base)
{
base = 10;
if (*cp == '0')
{
base = 8;
cp++;
if (*cp == 'x')
{
base = 16;
cp++;
}
}
}
else //base!=NULL;
{
if (base==8 && *cp=='0') cp++;
if (base==16 && (*cp=='0' && cp[1]=='x')) cp += 2;
}
retval = 0;
while (*cp)
{
if (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10)
昨天看cmddebug.c里面遇到一点小问题,怎么也弄不明白 请大家帮我看看哈 谢谢啦
是关于stroul这个函数的,在linux下函数原型为
unsigned long int strtoul(const char *nptr, char **endptr, int base);
The strtoul() function converts the initial part of the string in nptr
to an unsigned long integer value according to the given base,
which must be between 2 and 36 inclusive, or be the special value 0.
If endptr is not NULL,
strtoul() stores the address of the first invalid character in *endptr.
If there were no digits at all,
strtoul() stores the original value of nptr in *endptr (and returns 0).
In particular, if *nptr is not `' but **endptr is `' on return, the entire string is valid.
我查到的这段资料说endptr是用来存储第一个无效字符的地址的,就是说将遇到不合条件而终止的nptr中的字符指针由result返回。这样看来存储在endptr中的内容是无效的?
我的问题是:是不是正常请况下返回转换后的长整型数呢?因为如果不这样想很多代码就解释不通
在相关文件里strtoul的定义如下:
bool strtoul(const char *cp, ulong *result, int base){
ulong value, retval;
if (!cp) return false;
// base(柳过)捞 绝阑 锭绰 巩磊凯狼 屈侥栏肺 8, 10, 16柳荐甫 备盒.
if (!base)
{
base = 10;
if (*cp == '0')
{
base = 8;
cp++;
if (*cp == 'x')
{
base = 16;
cp++;
}
}
}
else //base!=NULL;
{
if (base==8 && *cp=='0') cp++;
if (base==16 && (*cp=='0' && cp[1]=='x')) cp += 2;
}
retval = 0;
while (*cp)
{
if (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10)
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!