64,637
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main()
{
int a = 0;
sscanf("-1000", "%x", &a);
printf("%+d",a);
return 0;
}
//-4096
#include <stdio.h>
#include <stdlib.h>
int main() {
long l;
char *e;
l=strtol("FFFFFC18", &e, 16 );
printf("%ld\n",l);//2147483647
sscanf("FFFFFC18","%X",&l);
printf("%ld\n",l);//-1000
return 0;
}
/* overflow or signed overflow occurred */
errno = ERANGE;
if ( flags & FL_UNSIGNED )
number = ULONG_MAX;
else if ( flags & FL_NEG )
number = (unsigned long)(-LONG_MIN);
else
number = LONG_MAX;
可以明显看到, 如果不是无符号数, 超过了0x7FFFFFFF就强制等于0x7FFFFFFF.
所以你想格式化任意的16进制,有符号无符号. 可以使用strtoul然后再转换成有符号.
long iVal = (long)strtoul( "FFFFFC18", NULL, 16 );