回 帖 发 新 帖 刷新版面

主题:[讨论]这个面试问题,真变态

这是一段把16进制数字,转化成十进制的函数。面试题要求。
第一,提高可读性。
第二,把程序修改到尽可能最短,但是不能用scanf和strtol函数
第三,把程序修改到运行速度尽可能快。

真郁闷啊。[em19]
大家都来讨论一下吧。

typedef unsigned char UB;

int atox8( char hex[] )
{
    int cnt = 0;
    int len = strlen( hex );
    UB num = 0;
    int total = 0;

    for( cnt = 0; cnt < len; cnt++ )
    {
        if (!(isxdigit(hex[cnt]))) { return -1; }
        if(    ( hex[cnt] >= '0' ) && ( hex[cnt] <= '9' ) )
        {
            num = hex[cnt] - '0';
        }
        else if( ( hex[cnt] >= 'a' ) && ( hex[cnt] <= 'f' ) )
        {
            num = hex[cnt] - 'a' + 10;
        }
        else
        {
            num = hex[cnt] - 'A' + 10;
        }
        total *= 0x10;
        total += num;
    }
    return total;
}[em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1]

回复列表 (共2个回复)

沙发

[size=6][size=4][size=3]自己 顶一下,楼上字太小了,放大一点

typedef unsigned char UB;

int atox8( char hex[] )
{
    int cnt = 0;
    int len = strlen( hex );
    UB num = 0;
    int total = 0;

    for( cnt = 0; cnt < len; cnt++ )
    {
        if (!(isxdigit(hex[cnt]))) { return -1; }
        if(    ( hex[cnt] >= '0' ) && ( hex[cnt] <= '9' ) )
        {
            num = hex[cnt] - '0';
        }
        else if( ( hex[cnt] >= 'a' ) && ( hex[cnt] <= 'f' ) )
        {
            num = hex[cnt] - 'a' + 10;
        }
        else
        {
            num = hex[cnt] - 'A' + 10;
        }
        total *= 0x10;
        total += num;
    }
    return total;
} [/size][/size][/size]

板凳

这个正常 啊!

我来回复

您尚未登录,请登录后再回复。点此登录或注册