2

16 進文字の 4 バイト文字列があり、それらを c で 2 バイト整数に変換したいと考えています。

strtol、fprintf、または fscanf を使用できません。

これ欲しい:-

unsigned char *hexstring = "12FF";

これに変換するには:-

unsigned int hexInt = 0x12FF
4

2 に答える 2

3

編集:ああ、アズムハクの提案されたリンクを読んでください。これは間違いなくその質問の複製です。「0x」プレフィックスを扱っているため、azmuhakのリンクの回答もより完全です...

以下は、標準ライブラリを使用せずに機能します... こちらの ideone で参照しください

#include <stdio.h>

#define ASCII_0_VALU 48
#define ASCII_9_VALU 57
#define ASCII_A_VALU 65
#define ASCII_F_VALU 70

unsigned int HexStringToUInt(char const* hexstring)
{
    unsigned int result = 0;
    char const *c = hexstring;
    char thisC;

    while( (thisC = *c) != NULL )
    {
        unsigned int add;
        thisC = toupper(thisC);

        result <<= 4;

        if( thisC >= ASCII_0_VALU &&  thisC <= ASCII_9_VALU )
            add = thisC - ASCII_0_VALU;
        else if( thisC >= ASCII_A_VALU && thisC <= ASCII_F_VALU)
            add = thisC - ASCII_A_VALU + 10;
        else
        {
            printf("Unrecognised hex character \"%c\"\n", thisC);
            exit(-1);
        }

        result += add;
        ++c;
    }

    return result;  
}

int main(void) 
{
    printf("\nANSWER(\"12FF\"): %d\n", HexStringToUInt("12FF"));
    printf("\nANSWER(\"abcd\"): %d\n", HexStringToUInt("abcd"));

    return 0;
}

コードをより効率的にすることができ、toupperライブラリ関数を使用していますが、自分で簡単に実装できます...

また、これは「0x」で始まる文字列を解析しません...しかし、関数の先頭に簡単なチェックを追加して、それらの文字を噛み砕くことができます...

于 2013-10-24T15:43:04.463 に答える